我正在尝试使用 hprof over IBM 堆栈(AIX / Linux 上的 J9 JVM)来分析 WebSphere。具体来说,我对 hprof 输出的 CPU 样本感兴趣,尤其是启动时间(从 WS 启动到“准备好运行”)。问题是,我无法在 hprof 结果文件中获得 CPU 样本输出。我正在使用以下 JVM 参数来配置 hprof: -Xrunhprof:cpu=samples,file=path-to-hprof.txt,用于以 ASCII 格式转储 hprof 输出。根据生成的 hprof 输出,CPU SAMPLES仅在程序退出时生成输出:HEAP DUMP、SITES、CPU SAMPLES|TIME 和 MONITOR DUMP|TIME 记录在程序退出时生成。因此,为了在 WebSphere 成功启动后优雅地关闭它,我正在使用stopServer.sh脚本,并期望java.hprof.txt在关闭完成后CPU SAMPLES 输出会出现在结果文件中,但事实并非如此。我究竟做错了什么?是否有更好的方法将 hprof 与 WebSphere 一起使用并生成 CPU 分析输出?任何帮助都感激不尽!编辑:我在 RHEL 7.5 上通过 IBM J9 VM(内部版本 2.6,JRE 1.6.0 20150619_253846)运行 WebSphere 版本 8.0.0.11。PS:我还寻找了一种从管理控制台 GUI 关闭 WS 的方法,但找不到任何方法。PPS:与此同时,我正在使用带有选项的非常好的jvmtop工具--profile <pid>,但这仅提供部分洞察力,并且与 hprof 不同,必须即时附加,因此执行的某些部分丢失了。
1 回答

慕的地8271018
TA贡献1796条经验 获得超4个赞
感谢@kgibm 的有用提示,我意识到我走在了正确的轨道上,第二天又回去重试。令人惊讶的是,这一次成功了!hprof 文件是使用预期的 WebSphere CPU 样本输出生成的。
我一直在尝试找出我做错了什么。以下是我认为发生的事情:
起初,我在 WebSphere JVM 参数中指定了几个本机代理。这些代理的组合导致 WS 运行得更慢。当我杀死 WS 时,在
Server server1 stop completed
消息打印和hprof.txt
完全写入之间有几秒钟的时间。我相信hprof.txt
在实际写入 CPU 样本输出之前,我查看得太快了。然后,为了解决这个问题,我将该
doe=n
参数添加到 hprof 参数中。doe
代表退出时转储,默认为y
. 直到后来我才意识到这可能是错误的,因为正如引用的那样,CPU 样本输出仅在退出时生成。
我认为这两个问题共同导致了我的困惑,所以当我开始清理时,一切都很好。
也许值得在hprof 文档中澄清该doe=n
选项与cpu=samples
, 并且可能与退出时写入的其他选项冲突(我在文档中没有看到这样的指示,但我可能错过了它)。
添加回答
举报
0/150
提交
取消