首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java应用程序中的高CPU利用率-为什么?

java应用程序中的高CPU利用率-为什么?
EN

Stack Overflow用户
提问于 2013-04-04 20:38:11
回答 7查看 113.8K关注 0票数 53

我有一个Java应用程序(基于web),它有时会在几个小时内显示非常高的CPU利用率(几乎90%)。Linux的TOP命令显示了这一点。在应用程序重新启动时,问题就消失了。

So调查

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

但是我不能确定是哪个线程占用了CPU,还是进入了无限循环(从而导致CPU利用率过高)。

日志不一定有帮助,因为违规代码可能不会记录任何内容。

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-04-04 23:45:53

如果探查器在您的设置中不适用,您可以尝试按照this post中的步骤识别线程。

基本上,有三个步骤:

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

Stack Overflow用户

发布于 2013-04-04 21:11:42

您可能是垃圾收集问题的受害者。

当您的应用程序需要内存,并且它的配置使用量越来越少时,垃圾收集器将经常运行,这将消耗大量CPU周期。如果它不能收集任何东西,你的内存就会很低,所以它会一次又一次地运行。当您重新部署应用程序时,内存将被清除,垃圾收集不会超过所需的次数,因此CPU利用率将保持在较低水平,直到再次填满为止。

您应该检查应用程序中是否存在可能的内存泄漏,以及是否为内存进行了良好的配置(请检查-Xmx参数,请参阅What does Java option -Xmx stand for?)

另外,你使用什么作为web框架?JSF在很大程度上依赖于会话,并且消耗大量内存,最好是无状态的!

票数 20
EN

Stack Overflow用户

发布于 2015-05-29 14:50:03

在线程转储中,您可以找到行号,如下所示。

对于当前正在运行的主线程...

代码语言:javascript
复制
"main" #1 prio=5 os_prio=0 tid=0x0000000002120800 nid=0x13f4 runnable [0x0000000001d9f000]
   java.lang.Thread.State: **RUNNABLE**
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:313)
    at com.rana.samples.**HighCPUUtilization.main(HighCPUUtilization.java:17)**
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15811411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档