我试图让 Tomcat(它当前在 Windows 2003 机器上作为服务运行)将堆转储到OutOfMemoryError
.
(Tomcat 正在运行 Hudson,它在我的构建结束时报告了一个堆空间问题。手动运行构建不会产生这样的错误。Hudson 的人需要一个堆转储才能开始。)
按照其他地方的说明,我告诉 Apache Service Monitor 配置它用于运行 Tomcat 的 JVM,以便在OutOfMemoryError
遇到 JVM 选项时转储堆: -XX:+HeapDumpOnOutOfMemoryError 然后我再次运行构建。果然,它报告了一个堆错误。我扫描整个磁盘以查找默认java_pid123.hprof
文件(显然123
被 JVM 的 PID 替换)。任何.hprof
地方都不存在文件。
我陷入了第 22 个问题:我需要 Hudson 人员的堆转储来修复他们的内存泄漏,但如果我在 Tomcat 下运行 Hudson,我无法获得堆转储。
当 Tomcat 作为 Windows 服务运行时,是否有一些特殊的方法可以在 OutOfMemoryError 上从中获取堆转储?
我尝试过的另一件事是在“启动”和“关闭”选项卡上告诉它使用“Java”选项而不是“jvm”选项。我相信这应该告诉服务管理器尝试使用 Java 可执行命令启动 Tomcat,而不是jvm.dll
直接启动。当我这样做时,服务将无法启动。
肯定有人遇到过类似的问题吗?