Jas*_*per 36 java performance multithreading web-applications cpu-usage
我有一个Java应用程序(基于Web),有时显示非常高的CPU利用率(几乎90%)几个小时.Linux TOP
命令显示了这一点.在应用程序重启时,问题就消失了.
所以要调查:
我使用Thread Dump来查找线程正在做什么.在'RUNNABLE'
州中发现了几个线程,在少数其他状态中发现了一些线程.在重复的线程转储中,我确实看到一些始终存在于'RUNNABLE'
状态中的线程.所以,他们似乎是罪魁祸首.
但我无法确定,哪个Thread正在占用CPU或进入无限循环(从而导致高CPU利用率).
日志不一定有用,因为违规代码可能没有记录任何内容.
我如何调查 - 应用程序的哪个部分或什么线程导致高CPU利用率? - 还有其他想法吗?
Ale*_*cob 13
您可能是垃圾收集问题的受害者.
当你的应用程序需要内存并且它的配置使用时,垃圾收集器的运行频率会降低,这会占用大量的CPU周期.如果它无法收集任何东西,你的记忆力会保持低水平,所以它会一次又一次地运行.重新部署应用程序时,内存将被清除,垃圾收集不会超过所需的次数,因此CPU利用率会保持低水平,直到它再次满.
您应检查应用程序中是否存在可能的内存泄漏,并且已为内存配置良好(请查看-Xmx
参数,请参阅Java选项-Xmx代表什么?)
另外,您使用什么作为Web框架?JSF依赖会话并消耗大量内存,最多考虑无状态!
在线程转储中,您可以找到如下行号。
对于当前正在运行的主线程...
"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)**
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
89173 次 |
最近记录: |