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

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

$top
top - :: up days, :, user, load average: 0.75, 0.60, 0.53
Tasks: total, running, sleeping, stopped, 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 - 5631m .0g 102m S 73.2 49.6 : java

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

$top -p  -H
top - :: up days, :, user, load average: 0.63, 0.59, 0.54
Tasks: total, running, sleeping, stopped, 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 - 5631m .0g 102m S 1.0 49.6 :21.02 java
admin - 5631m .0g 102m S 0.3 49.6 :56.39 java

3. dump文件:

$ jstack 123530 > Desktop/jstack.log

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

$printf %x
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文件

最新文章

  1. POJ2406 Power Strings(KMP,后缀数组)
  2. 遍历PspCidTable表检测隐藏进程
  3. JS练习 改变文本框状态
  4. html表格属性
  5. python 判断操作系统类型
  6. bzoj 1014 [JSOI2008]火星人prefix(splay+hash)
  7. F - Rain on your Parade - hdu 2389(二分图匹配,Hk算法)
  8. 自制AutoMapper实现DTO到持久层Entity的转换
  9. MySQL学习13 - 索引
  10. 多个PVSS数据点属性读写的优化处理
  11. golang sync包
  12. MySQL 三 二进制安装
  13. Guidelines for Writing a Good NIPS Paper
  14. 本地删除文件,git远程不同步删除
  15. Hive Tuning(四) 从查询计划看hive.auto.convert.join的好处
  16. 【转】使用python编写网络通信程序
  17. ulimit命令学习
  18. Java多线程同步机制(synchronized)
  19. 安装并使用PICT,生成测试用例
  20. eclipse开发hadoop2.2.0程序

热门文章

  1. saltstack初探
  2. 初识pipeline
  3. SQL2008 无日志附加MDF文件
  4. [从产品角度学EXCEL 03]-单元格的秘密
  5. UvaLA 3938 &quot;Ray, Pass me the dishes!&quot;
  6. 使用SVG绘制湖南地图
  7. 使用自签名的方式创建Docker私有仓库
  8. oracle dump数据库
  9. TBitmapSurface.StretchFrom
  10. linux Mint wine安装qq,桌面快捷键配置