【问题标题】:Profiling WebSphere with hprof for CPU SAMPLES output使用 hprof 分析 WebSphere 以获取 CPU SAMPLES 输出
【发布时间】:2019-04-14 08:43:16
【问题描述】:

我正在尝试通过 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 输出仅在程序退出时生成:

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。

P.S.:我还寻找了一种从管理控制台 GUI 关闭 WS 的方法,但找不到任何方法。

PPS:与此同时,我正在使用带有 --profile <pid> 选项的非常好的 jvmtop 工具,但这只能提供部分洞察力,并且与 hprof 不同,必须即时附加,所以有些部分的执行丢失。

【问题讨论】:

  • 你能检查一下native_stderr.log和native_stdout.log里有没有东西吗?
  • 另外,对于 J9,我推荐使用 IBM Java 附带的采样分析器 Health Center 而不是 HPROF:publib.boulder.ibm.com/httpserv/cookbook/…
  • 感谢您的 cmets,@kgibm! native_stderr.log 和 native_stdout.log 中除了标准 WS 输出之外没有弹出任何内容。
  • 注意,我主要对控制台分析器感兴趣——也许我应该在我的问题中强调这一点。但我肯定会仔细研究 IBM 健康中心抽样分析器。
  • Roger 那,@kgibm...非常感谢您的帮助!

标签: java jvm websphere hprof j9


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2010-09-16
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多