一尘不染

Java应用程序中的高CPU使用率-为什么?

java

我有一个Java应用程序(基于Web),有时显示几个小时的CPU使用率很高(几乎90%)。Linux
TOP命令显示了这一点。重新启动应用程序后,问题消失了。

因此要调查

我使用线程转储来查找线程在做什么。发现多个线程处于'RUNNABLE'状态,一些处于其他状态。在进行重复的线程转储时,我确实看到了一些始终处于'RUNNABLE'状态的线程。因此,他们似乎是罪魁祸首。

但是我无法确定是哪个线程正在占用CPU或进入了无限循环(从而导致较高的CPU使用率)。

日志不一定有帮助,因为有问题的代码可能未记录任何内容。

我该如何调查-应用程序或线程的哪个部分导致CPU使用率高? -还有其他想法吗?


阅读 171

收藏
2020-12-03

共1个答案

一尘不染

如果探查并不适用于您的设置,您可以尝试找出以下步骤线程这个职位

基本上,分三个步骤:

  1. 运行top -H并获取具有最高CPU的线程的PID。
  2. 将PID转换为十六进制。
  3. 在您的线程转储中查找具有匹配的十六进制PID的线程。
2020-12-03