【问题标题】:How do I find top 10 or top few CPU intensive threads created by Java process in Linux?如何在 Linux 中找到 Java 进程创建的前 10 个或前几个 CPU 密集型线程?
【发布时间】:2017-02-25 07:55:16
【问题描述】:

如何在 Linux 中找到 Java 进程创建的前 10 个或前几个 CPU 密集型线程堆栈跟踪?如果可能的话,我想知道花费了多少时间

【问题讨论】:

  • 您必须使用标准的 Linux 工具来执行此操作,Java 没有 CPU 使用的概念。然后可以将线程 ID 与来自 Java 的线程转储匹配以获取堆栈跟踪。
  • 我听说有一些新工具,但我不确定

标签: java linux performance cpu-usage


【解决方案1】:

这很简单。它奏效了!我们在 Java 中需要更多这样的工具。

https://github.com/patric-r/jvmtop

您使用一个命令jvmptop.sh <pid>获得以下信息

【讨论】:

  • 它是一个开源项目,可能会对您的结果造成巨大的损失,因此我仍然建议您交叉检查 yourkit profiler。您可以试用 15 天免费评估您的套件。
  • 不,你的工具包太重了,它不是免费的,它不够简单,不能在命令行中输入一些东西并弄清楚发生了什么。你的意思是巨额罚款?到目前为止效果很好。就像我说的那样,这些工具让 IMO 开发人员的生活变得轻松。
  • 我并不反对开源工具,事实上我自己使用了大量的开源技术和工具。任何分析工具都会对应用程序施加一些惩罚,以报告统计信息。但企业版将有更多的机会更少的惩罚和准确的结果。正如我所说,您可以免费使用 yourkit 的试用版,然后交叉检查结果。
  • 我反对商业工具。而且我相信开源可以构建与商业产品相当甚至更好的工具。看看它使用起来比设置重量级的 yourkit 分析器要简单得多。很多时候,我们还必须远程调试,有时远程机器不容易访问,因为它们必须通过一个或多个代理,在这种情况下,我什至不知道设置类似 yourkit profiler 的东西有多难。无论如何,jvmtop 很简单,它提供了我想要的。
【解决方案2】:

top 这样的标准 linux 工具只会给出消耗最多 cpu 的顶级进程。但无法判断单个 java process 中的所有线程占用了大部分 cpu。

您需要像YourKit 这样的分析工具来确定java 进程中的哪些线程正在使用大部分cpu,您可以在yourkit 中启用基于跟踪的采样,甚至还可以获取方法的invocation count

请参考 https://www.yourkit.com/docs/java/help/cpu_intro.jsp 文档,了解如何使用 yourkit 开始使用 CPU profiling

【讨论】:

  • 在 Java 8 中使用 Java Flight Recorder 进行任务控制也非常好。 +1
  • @PeterLawrey 当然也会检查。感谢您的支持:)
猜你喜欢
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 2020-07-07
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多