如何在Linux中找到由Java进程创建的前10个或前几个CPU密集线程?
如何在Linux中找到由Java进程创建的前10个或前几个CPU密集型线程堆栈跟踪?我想知道花了多少时间以及如果可能的话如何在Linux中找到由Java进程创建的前10个或前几个CPU密集线程?
像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
。
也在Java 8中的Java飞行记录器的任务控制是相当不错的。 +1 –
@PeterLawrey当然也会检查。感谢upvote :) –
它是一个开源项目,可能会对你的结果造成巨大的损失,因此我仍然建议你对它进行一下检查。您可以尝试15天免费评估yourkit。 –
Naw,yourkit的体重很重,它不是免费的,它不够简单,只需在命令行输入一些内容并找出发生了什么。你的意思是巨大的惩罚?迄今为止工作很好。就像我说的那样,这些是使开发人员生活更轻松的工具。 – user1870400
我并不反对开源工具,事实上我自己也使用了大量的开源技术和工具。任何分析工具都会在应用程序上施加一些惩罚,以报告统计数据。但企业版本将有更多的机会减少罚款和准确的结果。正如我所说的,你可以免费使用yourkit的试用版,只需交叉检查结果。 –
你将不得不使用标准的Linux工具来做到这一点,Java没有CPU使用的概念,得到下面的信息。然后可以将线程ID与Java中的线程转储进行匹配以获取堆栈跟踪。 – john16384
我听说有一些新的工具,虽然我不确定 – user1870400