resin java 进程占用CPU过大问题排查

centos top命令:
QQ20180907-103130
可以看到pid为27617的java进程占用cpu极大

查看进程详情
QQ20180907-103302
可以看到,cwd -> /usr/local/server/resin1,这是个resin进程

确定是resin导致的,然后怎么办呢?

查看哪个线程占用太多的cpu

top -H -p 27617

QQ20180907-111718
可以看到,一下这四个线程占用cpu过高

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16947 root      20   0 8050m 2.5g  17m R 100.2 16.3  82635:33 java
16982 root      20   0 8050m 2.5g  17m R 99.8 16.3  82635:34 java
 2849 root      20   0 8050m 2.5g  17m R 99.8 16.3  61258:16 java
 2869 root      20   0 8050m 2.5g  17m R 99.8 16.3  61258:06 java
 2873 root      20   0 8050m 2.5g  17m R 99.8 16.3  61258:12 java
 2874 root      20   0 8050m 2.5g  17m R 99.8 16.3  61258:18 java

接着,将线程id即PID转Wie16进制,大写变小写,便于下面的查询
执行echo "obase=16; 16947" | bc,启动16947为要转换的PID,执行后得到

[root@rmt-app3 songtongyu]# echo "obase=16; 16947" | bc
4233

然后使用jstack 27617 >> jstack.txt命令导出线程栈信息,并在导出的文件中查找刚刚转换得到的16进制线程id,结果如下:
QQ20180907-112349
可见,hashmap 进入死循环了

(全文完)

(转载本站文章请注明作者和出处 resin java 进程占用CPU过大问题排查