java进程cpu使用率是100%高,但是根本没有请求,重启时进程恢复正常。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java进程cpu使用率是100%高,但是根本没有请求,重启时进程恢复正常。相关的知识,希望对你有一定的参考价值。

这是线程转储文件。这是一个tomcat服务。我在登录时发现了许多线程time_waited。但没有写出实际的日志。

我用jvisualvm来监控full-gc,但是gc是正常的。

我无法从此线程转储中获取任何有用的信息。有可能cpu被卡在while循环中。但是这个线程转储中没有显示任何证据。

如果你需要任何其他信息,我会提供它,真的想弄清楚这一点。 :d

thread dump

答案

这里是gc日志,伊甸园空间很快就被填满了,但是在小gc之前和之后,来自和到空间都是空的,老一代也是满的,也许对象太多而且无法填充年轻一代。

enter image description here

另一答案

我用fastthread.io分析你的线程转储文件,并且结果链接是:thread_dump_file_analysis_result

这个线程转储存在一些问题:

  • 创建了太多的线程,1199。这是一个高线程数!它可能导致java.lang.OutOfMemoryError:无法创建新的本机线程。
  • gc.log也来了。程序正在不断地创建线程并使fgc发生 - 当线程对象太大而无法在空间中创建时,所以垃圾收集器尝试在旧空间中分配对象,但fgc已满。

以上是关于java进程cpu使用率是100%高,但是根本没有请求,重启时进程恢复正常。的主要内容,如果未能解决你的问题,请参考以下文章

Java如何定位占用CPU比较高的问题

java cpu占用高,该怎么处理

LINUX系统下查看JAVA的哪个线程占用CPU高

LINUX系统下查看JAVA的哪个线程占用CPU高

为啥logstash进程的CPU使用率100

如何在Windows 7 中查看占用CPU资源高的程序