如何在Linux中找到由Java进程创建的前10个或前几个CPU密集线程?

问题描述:

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

+1

你将不得不使用标准的Linux工具来做到这一点,Java没有CPU使用的概念,得到下面的信息。然后可以将线程ID与Java中的线程转储进行匹配以获取堆栈跟踪。 – john16384

+0

我听说有一些新的工具,虽然我不确定 – user1870400

top这样的标准linux工具只会提供*进程,而这些进程会占用最多的CPU。但不能说明单个java process内的所有线程占用了大部分CPU。

你需要一个像YourKit一个分析工具,以确定在java程序什么的线程占用了大部分的CPU,你可以启用yourkit基于跟踪采样,甚至得到一个方法的invocation count为好。

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

+0

也在Java 8中的Java飞行记录器的任务控制是相当不错的。 +1 –

+0

@PeterLawrey当然也会检查。感谢upvote :) –

这很简单,容易。它的工作!在Java中我们需要更多这样的工具。

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

您可以通过使用一个命令jvmptop.sh <pid>

enter image description here

+0

它是一个开源项目,可能会对你的结果造成巨大的损失,因此我仍然建议你对它进行一下检查。您可以尝试15天免费评估yourkit。 –

+0

Naw,yourkit的体重很重,它不是免费的,它不够简单,只需在命令行输入一些内容并找出发生了什么。你的意思是巨大的惩罚?迄今为止工作很好。就像我说的那样,这些是使开发人员生活更轻松的工具。 – user1870400

+0

我并不反对开源工具,事实上我自己也使用了大量的开源技术和工具。任何分析工具都会在应用程序上施加一些惩罚,以报告统计数据。但企业版本将有更多的机会减少罚款和准确的结果。正如我所说的,你可以免费使用yourkit的试用版,只需交叉检查结果。 –