linux – 创建heapdumps的替代方案,性能比jmap更高?

linux – 创建heapdumps的替代方案,性能比jmap更高?,第1张

概述我必须创建heapdumps,它适用于jmap.我的问题是,jmap创建heapdump文件需要很长时间.特别是当堆越来越大(> 1GB)时,它需要太长时间. 一种情况为例: 当服务器遇到堆空间问题时,我想自动重启它并在重启之前创建一个heapdump.这有效,但写入dumpdump需要很长时间.这样服务器停机时间过长. heapdump创建需要超过一个小时. 我知道-XX:HeapDumpOnO 我必须创建heapdumps,它适用于jmap.我的问题是,jmap创建heapdump文件需要很长时间.特别是当堆越来越大(> 1GB)时,它需要太长时间.

一种情况为例:
当服务器遇到堆空间问题时,我想自动重启它并在重启之前创建一个heapdump.这有效,但写入dumpdump需要很长时间.这样服务器停机时间过长. heapdump创建需要超过一个小时.

我知道-XX:HeapDumpOnOutOfMemoryError,但大部分时间我都可以在jvm抛出异常之前找到内存问题.

有没有替代jmap可以更快地写入heapdumps?
对于上述示例的特殊解决方案也将受到赞赏.

这个问题是编程和系统管理之间的混合,但我认为我在这里是正确的位置.

解决方法 我找到了问题的答案.
this回答关于serverfault的另一个问题给了我这个想法.

>使用gdb连接到您的java进程
gdb –pID =<你的java pID>
>从gdb创建核心转储
gcore<文件名>
分离
放弃
>重启java进程或执行任何您喜欢的 *** 作
>通过将jmap连接到核心转储,从核心转储创建堆转储
jmap -heap:format = b< java binary>的路径; < core dump file>

在步骤4中,指定正确的java二进制文件至关重要,否则jmap无法附加到核心转储.如果您不确定哪个二进制文件用于java进程,请使用gdb打开核心转储:
gdb –core =< core dump file>
会有像这样的一条线,告诉你完整的路径:
核心由’/ opt / tomcat / bin / Jsvc’生成.

创建核心转储要比通过jmap直接创建heapdump快得多.这样,您可以创建一个java进程的堆转储,而无需太长的停机时间.

编辑:
当您收到以下错误消息时,可能是您指定了错误的java二进制文件:

Error attaching to core file: Can't attach to the core file

要为jmap调用获取正确的java二进制文件,请使用gdb打开核心转储:

gdb --core=[path tp core file]

会有这样的一行,告诉你正确的二进制文件:

Core was generated by `/opt/tomcat/bin/Jsvc'.
总结

以上是内存溢出为你收集整理的linux – 创建heapdumps的替代方案,性能比jmap更高?全部内容,希望文章能够帮你解决linux – 创建heapdumps的替代方案,性能比jmap更高?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1039230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存