我试图在IBM堆栈(AIX / Linux上的J9 JVM)上使用hprof来分析WebSphere。具体来说,我对hprof输出的CPU示例感兴趣,特别是对启动时间(从WS启动到“准备就绪”为止)。
问题是,我无法在hprof结果文件中获取CPU示例输出。
我正在使用以下JVM参数来配置hprof:-Xrunhprof:cpu=samples,file=path-to-hprof.txt
,用于转储ASCII格式的hprof输出。根据生成的hprof输出,仅在程序出口处生成CPU SAMPLES
输出:
生成堆转储,站点,CPU SAMPLES | TIME和MONITOR DUMP | TIME记录 在程序出口。
因此,为了在成功启动WebSphere之后正常关闭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版。
P.S .:我还寻找了一种从管理控制台GUI关闭WS的方法,但找不到任何方法。
PPS:同时,我正在使用带有jvmtop选项的非常不错的--profile <pid>
工具,但这仅提供了部分洞察力,与hprof相比,它必须即时附加,因此执行的某些部分会丢失。
答案 0 :(得分:0)
由于@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
以及可能与在退出时写入的其他选项冲突(我没有看到这样的冲突)文档中的指示,但可能我错过了)。