[Java] CPU 100% 原因查找解决

CPU 100%肯定是出现死锁,这个时候观察内存还是够用的,但是CPU一直100%,以下几步解决:

1. 找到进程消耗cpu最大的

复制代码
$top
top - 11:37:34 up 100 days, 23:25,  1 user,  load average: 0.75, 0.60, 0.53
Tasks:  32 total,   3 running,  29 sleeping,   0 stopped,   0 zombie
Cpu(s): 11.6%us,  7.0%sy,  0.0%ni, 81.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   8388608k total,  8381460k used,     7148k free,        0k buffers
Swap:  1999864k total,        0k used,  1999864k free,  4089340k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
123530 admin      0 -20 5631m 4.0g 102m S 73.2 49.6   1024:13 java
复制代码

2. 打出进程中线程占用情况:

复制代码
$top -p 157030 -H
top - 11:39:46 up 100 days, 23:27,  1 user,  load average: 0.63, 0.59, 0.54
Tasks: 228 total,   0 running, 228 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.7%us,  0.3%sy,  0.0%ni, 98.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.2%st
Mem:   8388608k total,  8382160k used,     6448k free,        0k buffers
Swap:  1999864k total,        0k used,  1999864k free,  4089636k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
158166 admin      0 -20 5631m 4.0g 102m S  1.0 49.6  31:21.02 java
157051 admin      0 -20 5631m 4.0g 102m S  0.3 49.6   1:56.39 java
复制代码

3. dump文件:

$ jstack 123530 > Desktop/jstack.log

4. 找到#2步的PID对应的16进制

$printf %x 158166
269d6

5. 在#3的dump文件中找到#4对应的线程堆栈(0x269d6):

复制代码
zhangdeMacBook-Air:~ zhang$ more Desktop/jstack.log
2016-07-17 11:45:20
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode):

"Attach Listener" daemon prio=5 tid=0x00007f9aab82a800 nid=0x580b waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"SocketConnectorIoProcessor-0.2" daemon prio=5 tid=0x00007f9aab43b800 nid=0x7003 runnable [0x00000001699a4000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method)
        at sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.java:200)
        at sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.java:103)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
        - locked <0x00000001585a8078> (a sun.nio.ch.Util$2)
        - locked <0x00000001585a8088> (a java.util.Collections$UnmodifiableSet)
        - locked <0x00000001585a8028> (a sun.nio.ch.KQueueSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
        at org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:480)
        at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
复制代码

6. 结合dump和代码分析问题原因,一般都能找到原因

 

查看进程GC情况

sudo -u admin /opt/java/bin/jstat -gcutil 54358 1000

得到Dump文件

sudo -u admin /opt/java/bin/jmap -dump:format=b,file=/tmp/a.bin 54358

通过工具分析dump文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
问题:tomcat cpu 100% 回答:如果你的tomcat CPU占用率达到100%,你可以通过以下步骤来排查问题。首先,你可以使用process explorer工具来找到tomcat进程,并对tomcat的堆栈进行排序。找到占用CPU高的线程ID(tid),然后将tid转换为对应的十六进制数。接下来,你可以查找dump.txt文件中对应的堆栈信息,以进行问题排查。\[1\] 可能的原因分析是程序正在进行数据计算,或者程序进入了死循环。为了解决这个问题,你可以先使用top命令查看占用CPU的进程ID,然后使用ps -ef | grep PID命令定位具体的进程主体,例如是否是tomcat启动的java程序。最后,你可以使用ps -mp pid -o THREAD,tid,time命令打印出该进程下的线程占用CPU情况。\[2\] 如果你找到了耗时最高的线程ID(tid),你可以将其转换为十六进制格式,使用printf "%x\n" tid命令。最后,你可以使用jstack pid | grep tid -A 30命令打印出该线程的堆栈信息。\[3\]通过这些步骤,你可以进一步分析和解决tomcat CPU占用率过高的问题。 #### 引用[.reference_title] - *1* [tomcat占用cpu100%](https://blog.csdn.net/wangluo605/article/details/118570205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [tomcat的web程序持续占cpu问题](https://blog.csdn.net/u012599988/article/details/54412599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值