使用 hprof 分析 WebSphere 以获得 CPU 个样本输出
Profiling WebSphere with hprof for CPU SAMPLES output
我正在尝试在 IBM 堆栈(AIX 上的 J9 JVM/Linux)上使用 hprof 来分析 WebSphere。具体来说,我对 hprof 输出的 CPU 样本感兴趣,尤其是启动时间(从 WS 启动到 "ready for business")。
问题是,我无法在 hprof 结果文件中获得 CPU 样本输出。
我正在使用以下 JVM 参数来配置 hprof:-Xrunhprof:cpu=samples,file=path-to-hprof.txt
,用于以 ASCII 格式转储 hprof 输出。根据生成的 hprof 输出,CPU SAMPLES
输出仅在程序退出时生成:
HEAP DUMP, SITES, CPU SAMPLES|TIME and MONITOR DUMP|TIME records are generated
at program exit.
因此,为了在成功启动后优雅地关闭 WebSphere,我使用 stopServer.sh
脚本,并期望 CPU SAMPLES 输出出现在结果中 java.hprof.txt
关机完成后的文件,但不是。
我做错了什么?是否有更好的方法将 hprof 与 WebSphere 一起使用并生成 CPU 分析输出?任何帮助将不胜感激!
编辑: 我在 RHEL 上 运行 WebSphere 8.0.0.11 版 IBM J9 VM(内部版本 2.6,JRE 1.6.0 20150619_253846) 7.5.
P.S.: 我也在寻找从管理控制台GUI关闭WS的方法,但没有找到。
P.P.S.: 与此同时,我正在使用非常好的 jvmtop tool with the --profile <pid>
选项,但它只提供了部分洞察力,与 hprof 相反,必须附加在飞,所以执行的某些部分丢失了。
感谢@kgibm 的有用提示,我意识到我走在了正确的轨道上,并在第二天回去再试一次。令人惊讶的是,这一次,它奏效了! hprof 文件是用预期的 WebSphere CPU 样本输出生成的。
我一直在尝试弄清楚我一开始就错了。这是我认为发生的事情:
起初,我在 WebSphere JVM 参数中指定了几个本机代理。这些代理的组合导致 WS 运行 慢得多。当我杀死 WS 时,Server server1 stop completed
消息被打印和 hprof.txt
被完全写入之间有几秒钟的时间。我相信在实际写入 CPU 示例输出之前我太快查看 hprof.txt
。
然后,为了解决这个问题,我在 hprof 参数中添加了 doe=n
参数。 doe
代表退出时转储,默认为y
。直到后来我才意识到这可能是错误的,因为正如引用的那样,CPU 样本输出仅在退出时生成。
我认为这两个问题共同导致了我的困惑,所以当我开始清理时,一切正常。
也许在 hprof documentation 中值得澄清的是 doe=n
选项与 cpu=samples
冲突,并且可能与退出时写入的其他选项冲突(我没有在文档中看到这样的指示,但我可能错过了它)。
我正在尝试在 IBM 堆栈(AIX 上的 J9 JVM/Linux)上使用 hprof 来分析 WebSphere。具体来说,我对 hprof 输出的 CPU 样本感兴趣,尤其是启动时间(从 WS 启动到 "ready for business")。
问题是,我无法在 hprof 结果文件中获得 CPU 样本输出。
我正在使用以下 JVM 参数来配置 hprof:-Xrunhprof:cpu=samples,file=path-to-hprof.txt
,用于以 ASCII 格式转储 hprof 输出。根据生成的 hprof 输出,CPU SAMPLES
输出仅在程序退出时生成:
HEAP DUMP, SITES, CPU SAMPLES|TIME and MONITOR DUMP|TIME records are generated at program exit.
因此,为了在成功启动后优雅地关闭 WebSphere,我使用 stopServer.sh
脚本,并期望 CPU SAMPLES 输出出现在结果中 java.hprof.txt
关机完成后的文件,但不是。
我做错了什么?是否有更好的方法将 hprof 与 WebSphere 一起使用并生成 CPU 分析输出?任何帮助将不胜感激!
编辑: 我在 RHEL 上 运行 WebSphere 8.0.0.11 版 IBM J9 VM(内部版本 2.6,JRE 1.6.0 20150619_253846) 7.5.
P.S.: 我也在寻找从管理控制台GUI关闭WS的方法,但没有找到。
P.P.S.: 与此同时,我正在使用非常好的 jvmtop tool with the --profile <pid>
选项,但它只提供了部分洞察力,与 hprof 相反,必须附加在飞,所以执行的某些部分丢失了。
感谢@kgibm 的有用提示,我意识到我走在了正确的轨道上,并在第二天回去再试一次。令人惊讶的是,这一次,它奏效了! hprof 文件是用预期的 WebSphere CPU 样本输出生成的。
我一直在尝试弄清楚我一开始就错了。这是我认为发生的事情:
起初,我在 WebSphere JVM 参数中指定了几个本机代理。这些代理的组合导致 WS 运行 慢得多。当我杀死 WS 时,
Server server1 stop completed
消息被打印和hprof.txt
被完全写入之间有几秒钟的时间。我相信在实际写入 CPU 示例输出之前我太快查看hprof.txt
。然后,为了解决这个问题,我在 hprof 参数中添加了
doe=n
参数。doe
代表退出时转储,默认为y
。直到后来我才意识到这可能是错误的,因为正如引用的那样,CPU 样本输出仅在退出时生成。
我认为这两个问题共同导致了我的困惑,所以当我开始清理时,一切正常。
也许在 hprof documentation 中值得澄清的是 doe=n
选项与 cpu=samples
冲突,并且可能与退出时写入的其他选项冲突(我没有在文档中看到这样的指示,但我可能错过了它)。