我有一个使用jsl作为Windows服务运行的java进程。 由于某种原因,它经历了一个内存错误。 这个过程仍在运行,我想知道,在我停止服务之前,是否有办法分析OOM发生的原因?
提前致谢。 盖
答案 0 :(得分:1)
不幸的是,你无法将JVM中的状态解除到OOME发生的那一刻。您可以使用jmap
获取heapdump进行分析。这应该让你知道什么是占用大部分内存现在。
我还强烈建议您使用+XX:+HeapDumpOnOutOfMemoryError参数运行该过程。当应用程序发现OOM错误时,这将触发自动堆转换。在我看来,应该使用此选项启动所有Java应用程序,否则无法调查OOM错误,并且它不会在应用程序上添加任何开销(只要没有OOM错误)。