文档章节

排查CPU超100%的方法和解释

刺猬一号
 刺猬一号
发布于 2017/03/31 16:17
字数 971
阅读 34
收藏 3

当CPU超过100% 或者接近100% 时有必要对线程进行排查

1, top 找出那条进程CPU比较高 PID

2, top -p PID -H 打印 该PID进程下哪条线程的CPU占用比较高 ,tid

3, printf "%x\n" tid 将该id进行16进制转换 id eg:4a05

4, jstack PID |grep id -A 30 打印线程的堆栈信息

在此就可以查看造成CPU异常是由那条线程造成的了。

本人异常是由于报java.lang.OutOfMemoryError: PermGen space 

查出来的异常如下

"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007f8c7c016000 nid=0x4a05 runnable  
  
"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007f8c7c017800 nid=0x4a06 runnable  
  
"VM Periodic Task Thread" prio=10 tid=0x00007f8c7c12b800 nid=0x4a0e waiting on condition  


是由GC造成的,接着采用jstat -gc PID 5000 打印GC情况发现 PC和PU(持久代的容量和已使用的字节已经一样大小了),这正是造成exception 的原因

加大持久代的大小即可

-XX:PermSize=64M -XX:MaxPermSize=128M

这里的两个值尽量相等,可避免JVm自己进行调整,避免性能浪费

----------------------------------万能的分隔符-------------------------------

纯属愚见,欢迎指正,共同进步

jstat -gc PID 5000 隔5s打印GC的情况

jstat -gc 18947 5000  
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT  
 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   63239.7   83968.0 83967.9  15426   88.037 15382 3364.663 3452.700  
 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   63239.7   83968.0 83967.9  15448   88.130 15404 3369.525 3457.654  
 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   63239.7   83968.0 83967.9  15470   88.239 15426 3374.401 3462.640  
 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   63239.7   83968.0 83967.9  15492   88.333 15448 3379.277 3467.610  
 64.0   64.0   0.0    0.0   349376.0   0.0     699072.0   63239.7   83968.0 83967.9  15514   88.426 15470 3384.160 3472.586  

附参数信息:

         S0C:年轻代中第一个survivor(幸存区)的容量 (字节) 
         S1C:年轻代中第二个survivor(幸存区)的容量 (字节) 
         S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节) 
         S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节) 
         EC:年轻代中Eden(伊甸园)的容量 (字节) 
         EU:年轻代中Eden(伊甸园)目前已使用空间 (字节) 
         OC:Old代的容量 (字节) 
         OU:Old代目前已使用空间 (字节) 
         PC:Perm(持久代)的容量 (字节) 
         PU:Perm(持久代)目前已使用空间 (字节) 
         YGC:从应用程序启动到采样时年轻代中gc次数 
         YGCT:从应用程序启动到采样时年轻代中gc所用时间(s) 
         FGC:从应用程序启动到采样时old代(全gc)gc次数 
         FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s) 
         GCT:从应用程序启动到采样时gc用的总时间(s) 
         NGCMN:年轻代(young)中初始化(最小)的大小 (字节) 
         NGCMX:年轻代(young)的最大容量 (字节) 
         NGC:年轻代(young)中当前的容量 (字节) 
         OGCMN:old代中初始化(最小)的大小 (字节) 
         OGCMX:old代的最大容量 (字节) 
         OGC:old代当前新生成的容量 (字节) 
         PGCMN:perm代中初始化(最小)的大小 (字节) 
         PGCMX:perm代的最大容量 (字节)   
         PGC:perm代当前新生成的容量 (字节) 
         S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 
         S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 
         E:年轻代中Eden(伊甸园)已使用的占当前容量百分比 
         O:old代已使用的占当前容量百分比 
         P:perm代已使用的占当前容量百分比 
         S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节) 
         S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节) 
         ECMX:年轻代中Eden(伊甸园)的最大容量 (字节) 
         DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满) 
         TT: 持有次数限制 
         MTT : 最大持有次数限制 

© 著作权归作者所有

刺猬一号
粉丝 12
博文 373
码字总数 616361
作品 0
深圳
私信 提问
redis keys命令之领悟

昨晚我们工程的redis告警,cpu占用率100%,运营人员把我们刚上线的工程给停了,后来排查是因为我们工程中使用了redis的keys命令,导致cpu占用率100%,还导致了其他系统连不上,多么痛的领悟。...

程序猿之小菜鸟
2016/08/03
72
0
PgSQL · 最佳实践 · CPU满问题处理

前言 在数据库运维当中,一个DBA比较常遇到又比较紧急的问题,就是突发的CPU满(CPU利用率达到100%),导致业务停滞。DBA不一定非常熟悉业务实现逻辑,也不能掌控来自应用的变更或负载变化情...

阿里云RDS-数据库内核组
2017/07/10
0
0
CPU 100% 异常排查实践与总结

CPU 100% 异常排查实践与总结 leejun2005的个人页面2018-01-041 阅读 java 1、问题背景 昨天下午突然收到运维邮件报警,显示数据平台服务器cpu利用率达到了98.94%,而且最近一段时间一直持续...

leejun_2005的个人页面
2018/01/04
0
0
【SQL Server】SQL Server占用CPU使用率100%的解决方法

原文:【SQL Server】SQL Server占用CPU使用率100%的解决方法 近日,帮一个客户解决了服务器CPU占用率高达100%的问题。 以前做的一个某污水处理厂自控系统项目,客户反映其自控服务器有故障,...

杰克.陈
2017/12/15
0
0
一文学会Java死锁和CPU 100% 问题的排查技巧

做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开 工欲善其事,必先利其器 00 本文简介 作为一名搞技术的程序猿或者是攻城狮,想必你应该是对下面这两个问题有所了解...

阿飞_good
07/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

读书笔记:深入理解ES6 (五)

第五章 解构:使数据访问更便捷 第1节 为什么使用解构功能?   在ES5中,开发者们从对象、数组中获取特定数据并赋值给变量,编写了很多看起来同质化的代码。例如: 1 let options = {2 ...

张森ZS
8分钟前
7
0
CentOS7 yum方式安装MySQL5.7

在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。 1 下载并安装MySQL官方的 Yum Repository [root@localho...

roockee
16分钟前
6
0
Allegro三种自定义设置快捷键的方法

Allegro自定义设置快捷键的三种方法: 1、在Allegro PCB editor 命令窗口直接定义 2、通过修改用户变量env文件来设置快捷键 3、定义笔画为快捷键 1、在Allegro PCB editor 命令窗口直接定义 ...

demyar
20分钟前
6
0
如何做一张能让人眼前一亮的大屏?

作为在职场驰骋的社会人,提到数据可视化大家应该都不陌生了。数据可视化的作用也不用我多说,主要是利用图形化手段,更清晰直观地将数据展示。多层次、交互式的可视化分析能够方便决策者理解...

朕想上头条
21分钟前
4
0
TL138/1808/6748-EthEVM开发板硬件CPU、FLASH、RAM

TL138/1808/6748-EthEVM是广州创龙基于SOM-TL138/1808/6748核心板开发的一款开发板,具有三个网络接口。由于SOM-TL138/1808/6748核心板管脚兼容,所以此三个核心板共用同一个底板。开发板采用...

Tronlong创龙
26分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部