1

我正在尝试使用 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脚本,并期望 CPU SAMPLES 输出在关闭完成后出现在结果java.hprof.txt文件中,但事实并非如此。

我究竟做错了什么?是否有更好的方法将 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 不同,必须即时附加,因此执行的某些部分丢失了。

4

1 回答 1

0

感谢@kgibm 的有用提示,我意识到我走在了正确的轨道上,第二天又回去重试。令人惊讶的是,这一次成功了!hprof 文件是使用预期的 WebSphere CPU 样本输出生成的。

我一直在尝试找出我做错了什么。以下是我认为发生的事情:

  1. 起初,我在 WebSphere JVM 参数中指定了几个本机代理。这些代理的组合导致 WS 运行得更慢。Server server1 stop completed当我杀死 WS 时,在消息打印和hprof.txt完全写入之间有几秒钟的时间。hprof.txt我相信在实际写入 CPU 样本输出之前,我查看得太快了。

  2. 然后,为了解决这个问题,我将该doe=n参数添加到 hprof 参数中。doe代表退出时转储,默认为y. 直到后来我才意识到这可能是错误的,因为正如引用的那样,CPU 样本输出仅在退出时生成。

我认为这两个问题共同导致了我的困惑,所以当我开始清理时,一切都很好。

也许值得在hprof 文档中澄清该doe=n选项与cpu=samples, 并且可能与退出时写入的其他选项冲突(我在文档中没有看到这样的指示,但我可能错过了它)。

于 2018-11-17T20:45:57.740 回答