我们在prod环境中的应用程序正在生成频繁的堆/线程转储,同时运行非常大的报告,最终导致JVM失败。 WebSphere是服务器,并且堆大小在所有节点上设置为1024/2048(初始/最大)。
有哪些方法可以解决这个问题?我可以考虑以下选项。还有什么我想念的吗?
将最小/最大堆大小设置为2048甚至更高?
在WebSphere中启用详细垃圾回收并分析最佳堆大小?
线程分析: Runnable:123(67%) 被封锁:16(9%) 等待条件:43(23%)
答案 0 :(得分:0)
开始调查OOM的一个好的起点是this IBM KnowledgeCenter topic
答案 1 :(得分:0)
由于您似乎遇到OutOfMemory问题,因此有三种可能性需要考虑:
解决方案:您必须使用类似生产的流量加载测试您的应用,并相应调整最小/最大堆大小。
解决方案:分析使用 IBM Support Assistant tools 生成的heapdumps / coredump。对PM的PMR会有所帮助。
解决方案:打开PMR
这是关于WAS环境中Java内存管理的nice read。
答案 2 :(得分:0)
尝试从生产环境中捕获内存,垃圾收集信息。我不确定GC日志是否会对性能产生任何影响。但是,jstat是一种重量极轻的工具,可以在生产环境中使用,不会对性能产生任何影响。使用以下命令定期转储jstat的输出(这里我将间隔设置为1小时):
jstat -gc <PID> 3600s