Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
监视java线程执行的工具_Java_Performance_Jvm - Fatal编程技术网

监视java线程执行的工具

监视java线程执行的工具,java,performance,jvm,Java,Performance,Jvm,我有一个java web应用程序在Tomcat服务器(Linux)上运行。在生产环境中,我面临一些性能问题。tomcat运行的jsvc进程以随机间隔开始以90-100%的CPU运行。我找不到这次事件的触发因素。服务器是一个四核系统。内存消耗并不表示有任何异常 如何监控应用程序中的哪个线程(应用程序堆栈跟踪)导致问题 我正在检查和,但两者都没有提供有关应用程序中哪个线程导致CPU使用异常的详细信息。一种相对简单的方法可以做到这一点(这可能对您的情况有效,也可能无效,取决于行为发生的时间): 当您的

我有一个java web应用程序在Tomcat服务器(Linux)上运行。在生产环境中,我面临一些性能问题。tomcat运行的jsvc进程以随机间隔开始以90-100%的CPU运行。我找不到这次事件的触发因素。服务器是一个四核系统。内存消耗并不表示有任何异常

如何监控应用程序中的哪个线程(应用程序堆栈跟踪)导致问题


我正在检查和,但两者都没有提供有关应用程序中哪个线程导致CPU使用异常的详细信息。

一种相对简单的方法可以做到这一点(这可能对您的情况有效,也可能无效,取决于行为发生的时间):

当您的应用程序表现出您想要调试的行为(在本例中,CPU使用率为90-100%)时,请在进程ID上使用jstack:

检查哪些线程正在运行以及它们在哪些方法中发生。如果你这样做了几次,就可以相对容易地发现罪犯的呼叫链。然后,您可以调试该链的入口


这不一定是最好或最优雅的方法,但它很容易做到,可能就是你所需要的一切。我会从那里开始。这类似于“printf是我使用过的最好的调试器”的理念。

您可以通过发送退出信号为任何Java应用程序中的所有线程获取stacktrace转储

 kill -QUIT [processId]

这将显示在进程的stdout中。

仅我的2美分,但我想知道,如果您不是在试验内存问题,CPU峰值可能是GC活动。因此,当您使用jconsole监视tomcat时,请查看内存选项卡,并检查堆使用率是否会很高。

就是您想要的。它与较新的JDK一起提供,并允许您进行监视。

另一个显示最高cpu消耗线程的工具是

有一个名为“threadcpu”的Linux工具,用于测量每个线程的cpu使用情况。对于Java线程,它使用jstack获取并打印线程名称


我还要补充一点,像JProfiler这样的探查器可能会为您提供更多关于线程在做什么的指标,但是如果问题相对简单,那么追踪这些指标可能非常耗时。因此,我仍然要强调,在启动适当的分析器之前,需要对一些示例进行基于jstack的快速分析。
[javascript性能]
标记有什么问题?@skaffman,对不起,java性能,我已经纠正了它。我们的生产服务器也有一些性能问题,而且,由于将探查器连接到生产服务器非常棘手。。我们试了一下纽利克。这是一个为您的绩效调查添加的惊人工具。