我对我的应用中的堆使用情况几乎没有疑问。在实例中,观察到周末用户活动最小(或零),但堆使用率线性增加,达到阈值,导致GC启动。我希望分析此堆使用的原因并确认这是否正常和预期。假设没有用户活动,这个堆使用可能是由守护进程引起的,例如我的应用程序的守护程序进程或Weblogic线程。如何确认哪个守护程序进程导致此行为,是否需要执行任何操作才能解决此问题?
我已经对我的应用程序的守护进程进行了大量测试,并且相当确信它不会滥用堆。 但是我可以用Weblogic的守护进程做什么呢?我应该忍受它还是打架?
编辑:我正在使用BEA JRockit 1.6在Weblogic 10.3上运行。在垃圾收集器运行之前,观察到堆使用量的线性增加约20小时。我用JProbe测试了我的应用程序,但没有发现任何泄漏。
答案 0 :(得分:2)
我肯定会尝试寻找问题(这可能在您的代码中,而不是在WebLogic中)。问题是您没有提供有关您的环境的详细信息(例如WLS版本,Java版本,平台)或您的问题(例如,到GC需要多长时间)所以提供指导有点困难但是......
如果这是一个选项,我会将VisualVM用于analyze this memory leak(或您选择的探查器)。如果可能,尝试在本地环境中重现问题,这将更容易。如果没有,这是JMX URL:
service:jmx:iiop:///jndi/iiop://host:port/weblogic.management.mbeanservers.runtime
只需确保启用匿名管理员查找:转到域>安全>常规并选中匿名管理员查找已启用复选框)。
还要确保为管理服务器和应用程序服务器启用IIOP协议:转到服务器>协议,并选中 IIOP 复选框)。还要确定
另一种选择是采用一些堆转储并使用Eclipse MAT等工具进行分析。
更新:由于GC需要大约20个小时,我会安排一个任务来生成一些堆转储(例如每小时一个)并分析它们以找出哪些对象随着时间流逝占用内存。这可能会给罪魁祸首提供一个暗示。
答案 1 :(得分:1)
似乎是J2EE服务器的正常行为。即使您的应用程序根本没有负载,服务器上也会有一些活动(管理,监控等),这些活动将继续创建对象。即使是在分析堆使用情况的活动也会创建对象。
我认为对象创建的速度非常小,因为填充堆并启动GC循环需要20个小时。关于您的担忧的更多细节可能会有所帮助
即。 - 您是否收到OutOfMemory错误 - 什么是JVM创业公司? (堆大小,垃圾收集器类型等。)
答案 2 :(得分:1)
看看盒子上的prstat,了解周末运行的其他工作。 cron / backup jobs等运行并命中你的服务器是很常见的,并且团队已经解决了为什么首先设置它们的原因。