当前位置: 首页 > 知识库问答 >
问题:

Java进程(非堆)内存泄漏

狄侯林
2023-03-14

问题描述:我们在一个web应用程序(在CQ5上)中面临以下问题:

系统配置详细信息:系统内存: 7GB Xmx: 3.5 GB Xms: 1 GB MaxPermGen: 300MB最大观察线程数: 620(包括300个超文本传输协议请求服务线程)Xss:默认值

问题是cq5 java进程(运行servlet引擎)消耗的内存随着时间的推移而不断增加。一旦达到6到6.5GB以上(系统内存达到7GB),JVM就会停止响应。(由于内存不足和大量分页活动)。然而,堆和permgen的总容量保持在3.8(3.50.3)GB或以下。这意味着非堆内存(本机内存线程堆栈空间)将从几百MB(在CQ5服务器重新启动后)持续增长到超过2-3 GB(在长时间重载运行4-5小时后)。因此,我们的目标基本上是找出非堆内存中的内存泄漏,这可能是由于第三方库、Java代码的间接引用等引起的。我们没有收到任何内存不足错误。

需要帮助:

  • 现在我们使用的大多数工具都为我们提供了关于堆内存的良好信息和详细信息。但是我们无法查看本机内存。请求提供您关于如何监控非堆内存详细信息(在对象级别或内存区域级别)的宝贵建议。
  • 如果你们中有人在任何应用程序中遇到过类似的问题(非堆内存泄漏),并且想分享关于如何修复非堆内存泄漏的知识,请分享您的经验。

共有1个答案

淳于功
2023-03-14

这实际上取决于您的具体实现:您部署了什么代码,您正在使用什么架构体系,您正在运行什么版本,您正在使用什么应用程序服务器(如果有的话),等等。

也就是说,我在CQ5.5和Image Servlet中遇到了内存泄漏问题。这实际上是一个内存泄漏,在一个为Image Servlet提供动力的Java库中,一直隐藏着。它通过Java版本更新得到了补救,但这是由Image servlet引起的。这是你的问题,但可能值得一提。

 类似资料:
  • 我们有一个在Solaris 10上运行的java进程,为大约200-300个并发用户提供服务。管理员报告说,随着时间的推移,进程使用的内存显著增加。几天内它就达到2GB,并且从未停止增长。 我们已经转储了堆,并使用Eclipse内存探查器对其进行了分析,但没有看到任何异常。堆的大小非常小。 在添加内存统计日志记录后,我们在应用程序中发现管理员使用的“top”实用程序报告的内存使用量与MemoryM

  • 遵循下面的过程,但我无法分析转储生成。 null 提前谢了。

  • 我的WebLogic服务器配置了16GB的堆空间,但当大多数用户开始工作时,90%的堆空间在生产使用1小时内就被使用了。我观察到每当这种情况发生时,都有几条线卡住了。 我已经检查了线程转储,没有“等待锁定”对象线程,线程类似于如下所示,线程没有明显的原因被卡住。

  • 我们有一个使用eclipse-jetty版本8.1.6的java webserver。最近我们开始注意到内存不足的错误。我们对活动线程数的分析很少。这似乎在100左右是合理的。该进程具有5GB最大堆内存和4GB初始堆内存。 webserver平均每分钟接收350个请求。此外,我们在ELB(kubernetes服务)后面运行许多这样的实例。跑了几个小时后,我们注意到了这个OOM。这个问题是随机的,它

  • 本文向大家介绍Java 内存泄漏,包括了Java 内存泄漏的使用技巧和注意事项,需要的朋友参考一下 在Java中,垃圾回收(析构函数的工作)是使用垃圾回收自动完成的。但是,如果代码中有引用它们的对象怎么办?它无法取消分配,即无法清除其内存。如果这种情况一再发生,并且创建或引用的对象根本没有被使用,它们就会变得无用。这就是所谓的内存泄漏。 如果超过了内存限制,则程序将通过抛出错误(即“ OutOfM

  • 问题内容: 我们在 Tomcat 服务器上部署了一个Web应用程序。我们运行某些计划的作业,然后堆内存达到峰值并稳定下来,一切似乎都很好。但是,系统管理员抱怨内存使用率(Linux上的“ top”)随着计划的作业的增加而不断增加。堆内存和CPU内存之间有什么关联?可以通过任何JVM设置来控制它吗?我使用 JConsole 监视系统。 我通过JConsole强制进行垃圾收集,并且堆使用率下降了,但是