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文件

[Java] CPU 100% 原因查找解决的更多相关文章

  1. Java死锁排查和Java CPU 100% 排查的步骤整理

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

  2. Java ConcurrentModificationException异常原因和解决方法

    Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...

  3. Java并发编程:Java ConcurrentModificationException异常原因和解决方法

    Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...

  4. 【转】Java ConcurrentModificationException异常原因和解决方法

    原文网址:http://www.cnblogs.com/dolphin0520/p/3933551.html Java ConcurrentModificationException异常原因和解决方法 ...

  5. 9、Java ConcurrentModificationException异常原因和解决方法

    Java ConcurrentModificationException异常原因和解决方法 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.u ...

  6. Java Web乱码原因与解决

    Java Web乱码原因与解决 一.了解编码常识: 1.ASCII 码 众所周知,这是最简单的编码.它总共可以表示128个字符,0~31是控制字符如换行.回车.删 除等,32~126是打印字符,可以通 ...

  7. (转)Java ConcurrentModificationException异常原因和解决方法

    转载自:http://www.cnblogs.com/dolphin0520/p/3933551.html 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会 ...

  8. Java ConcurrentModificationException异常原因和解决方法(转)

    摘自:http://www.cnblogs.com/dolphin0520/p/3933551.html#undefined 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同 ...

  9. [转]Java CPU 100% 排查技巧

    文章来源:微信公众号:猿天地 平时多积累一点,这样在遇到问题的时候就少句求人的话.如果在实际的开发中遇到CPU 100%问题,要怎么排查呢?如果你没有遇到过这个问题,请先自己思考10s,如果你遇到过, ...

随机推荐

  1. oracle一次给多表添加相同字段

    遇到一个需求:在已经建好的数据库中,为每一个数据表都添加相同的3个字段. 分析:数据库中的数据表较多,一一手动修改耗时低效,是否可以用程序遍历每一张表,然后为遍历到的当前表添加字段? 查询当前用户的所 ...

  2. hibernate学习一(hibernate简介与准备)

    一.hibernate简介 Hibernate是一个开放源代码的对象-关系映射(Object/Relational Mapping 即 ORM)框架,它对JDBC进行了非常轻量级的对象封装,它将POJ ...

  3. mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法【mysql低版本数据导入到高版本出错的解决方法】

    mysql5.x升级至mysql5.7后导入之前数据库date出错,这是由于MySQL的sql_mode的影响,解决方法如下所示: [具体参考:mysql的sql_mode详解]修改mysql5.7的 ...

  4. LODProp3D实例

    1. Level of detail(LoD)多细节层次描述(简称LoD)是实时绘制复杂几何场景的一种有效工具.基于层次结构的动态简化方法能够根据视点的变化,实时连续地转换场景细节模型.在本例中,实现 ...

  5. 处理Assetbundle依赖关系时想到的一道题

    在处理unit3d的assetbundle依赖关系的时候,想到了一道有趣的题目: 给定一堆数据,例如{A = {1, 3, 4}, B = {3, 4}, C = {5, 6}, D = {6, 7, ...

  6. 仅用aspx文件实现Ajax调用后台cs程序。(实例)

    仅用aspx文件实现Ajax调用后台cs无刷新程序.(实例) 两个文件:aaa.aspx 和aaa.aspx.cs 一.aaa.aspx <script type="text/java ...

  7. HBase 基本shell命令

  8. docker 初探之简单安装 ----Windows10

    报错一 $ docker run hello-world Unable to find image 'hello-world:latest' locally Pulling repository do ...

  9. 《PHP字符串函数》笔记

    ① str_repeat() 重复一个字符串; ② str_shuffle() 随机打乱一个字符串; ③ strftime() 根据区域设置格式化本地时间/日期; ④ strip_tags() 从字符 ...

  10. http://blog.csdn.net/java2000_wl/article/details/8627874

    http://blog.csdn.net/java2000_wl/article/details/8627874