Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
Jvm 阻塞的线程会导致高CPU消耗吗_Jvm_Cpu Usage_Thread Dump_Apm - Fatal编程技术网

Jvm 阻塞的线程会导致高CPU消耗吗

Jvm 阻塞的线程会导致高CPU消耗吗,jvm,cpu-usage,thread-dump,apm,Jvm,Cpu Usage,Thread Dump,Apm,最近,我们在生产环境中看到了一个高CPU消耗问题,并且在调试相同的环境时看到了一些奇怪的现象。当我做了一个“top-H”来查看每个线程ID的CPU统计数据时,我发现一个线程X消耗了大量的CPU。当我进行线程转储时,我看到这个线程X处于阻塞状态。这意味着什么,处于阻塞状态的线程会消耗高CPU吗?我认为这可能是一个微不足道的问题,但我是调试性能问题和JVM的新手,不确定我在这里遗漏了什么。进入和退出阻塞状态可能代价高昂。如果您被阻塞了一小段时间,这不是问题,但是如果您在繁忙的循环中短暂阻塞,您的线程

最近,我们在生产环境中看到了一个高CPU消耗问题,并且在调试相同的环境时看到了一些奇怪的现象。当我做了一个“top-H”来查看每个线程ID的CPU统计数据时,我发现一个线程X消耗了大量的CPU。当我进行线程转储时,我看到这个线程X处于阻塞状态。这意味着什么,处于阻塞状态的线程会消耗高CPU吗?我认为这可能是一个微不足道的问题,但我是调试性能问题和JVM的新手,不确定我在这里遗漏了什么。

进入和退出阻塞状态可能代价高昂。如果您被阻塞了一小段时间,这不是问题,但是如果您在繁忙的循环中短暂阻塞,您的线程可能会看起来被阻塞,但实际上会烧坏CPU


我会寻找在共享资源上重复竞争的多个线程,这些线程进入阻塞状态的时间非常短。

@Peter已经提到了繁忙循环(在同步情况下可能是自旋锁的JVM内部,或者在某些情况下由应用程序本身创建的繁忙循环)的优点,这可能会消耗CPU。还有另一种间接方式,由于线程阻塞,CPU可能会变得非常高。通常在web服务器中,如果大量线程处于阻塞状态(不是因为同步锁相关的阻塞,而是因为等待来自后端数据存储的IO),那么可能会对JVM垃圾收集造成很大压力。这些工作线程应该很快完成它们的工作,以便它们在堆上创建的所有对象都被快速取消引用和垃圾收集。如果大量线程处于这种状态,则垃圾收集线程必须超时工作,最终可能占用大量CPU。

您只需拍摄快照。这并不能证明线程在整个时间内都处于
阻塞状态。根据实现的不同,如果试图离开
阻塞状态失败,线程也可能会占用CPU周期。