Jar*_*ala 8 java websphere memory-leaks out-of-memory
我有一个在Websphere Application Server 6.0上运行的应用程序,由于内存不足,它几乎每天都会崩溃.从详细的GC确定存在内存泄漏(其中许多)
不幸的是,应用程序是由外部供应商提供的,并且解决问题是缓慢而痛苦的过程.作为流程的一部分,我需要在每次OOM发生时收集日志和堆转储.
现在我正在寻找一些如何实现自动化的方法.基本问题是如何检测OOM条件.一种方法是创建shell脚本,它将定期搜索新的heapdumps.这种做法看起来有点脏.另一种方法可能是以某种方式利用JMX.但是我在这方面很少或根本没有经验,也不知道该怎么做.
或者是WAS的某种触发/挂钩?非常感谢你的每一个建议!
Mar*_*ark 10
您可以在启动时将以下参数传递给JVM,并且将在OutOfMemoryError上自动生成堆转储.第二个参数允许您指定堆转储文件的路径.至少使用它可以检查是否存在特定文件以查看是否发生了堆转储.
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=<value>
Run Code Online (Sandbox Code Playgroud)
如果你想让堆转储自动化,我会看到两个选项,但在OOM上使用堆转储的@ Mark解决方案并不令人满意.
MemoryMXBean来检测高内存压力,然后在使用量(或使用量增量)看起来很高时以编程方式创建堆转储.
jmap(在本地和远程工作).如果你可以在OOM上进行回调会很好,但是,嗯,回调可能只会因OOM错误而崩溃.:)