由于内存泄漏,我的 tomcat 应用程序崩溃了。我想在崩溃的系统/jvm 上进行堆转储。可能吗?我用的是windows/tomcat 6 怎么办?
问问题
2040 次
4 回答
4
该过程不再存在。所以没有要转储的堆。下次使用'-XX:+HeapDumpOnOutOfMemoryError'。
于 2012-03-27T13:37:43.947 回答
3
您可以通过以下方式在运行时获取堆转储:
jmap -dump:live,format=b,file=heap.dump
于 2012-03-27T14:16:27.517 回答
2
您无法在不再运行的进程上获得堆转储。下次启动 Tomcat 时,您将不得不编辑 /bin 目录中catalina.sh
首先调用的文件,以便它包含在内存不足时自动转储堆的选项。
您需要做的是编辑JAVA_OPTS
变量,以便包含您需要的 JVM 选项。所以在文件顶部附近,在JAVA_OPTS
创建之后,你需要做类似的事情
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
您也可以使用 JConsole 进行堆转储,但为了做到这一点,您需要大致了解 Tomcat 何时内存不足,以便堆转储帮助您诊断问题。
于 2012-03-27T14:41:41.880 回答
1
如果您的应用程序没有响应但 JVM 仍然一瘸一拐,您可以尝试使用 JConsole 并触发 Heap Dump。在此链接上搜索堆转储
于 2012-03-27T14:12:28.920 回答