cpu过高排查
2016-11-19 10:26
281 查看
线上服务器遇到某几台cpu占用过高的情况,一般会有这几个原因:
- 线上服务器负载不均,导致cpu占用不同;
- IO操作执行频繁,cpu一直等待;
- 程序中出现死循环,线程一直运行;
前两个可以通过查看监控排查,每台服务器的负载都是正常,qps相差不大,只有cpu相差较大,故排查第三种情况。
1.
top之后发现cpu占到30%左右
找到java pid
![](https://img-blog.csdn.net/20161119102547651?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.
ps -mp 229148 -o THREAD,tid,time
首先显示线程列表,找到占用cpu过高的线程:
![](https://img-blog.csdn.net/20161119102541760?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.
将需要的线程ID转换为16进制格式
$printf "%x\n" 231486
3883e
4.
打印线程堆栈,可以看到循环体所在线程一直处于runnable状态。
$jstack 229148 |grep 3883e -A 30
- 线上服务器负载不均,导致cpu占用不同;
- IO操作执行频繁,cpu一直等待;
- 程序中出现死循环,线程一直运行;
前两个可以通过查看监控排查,每台服务器的负载都是正常,qps相差不大,只有cpu相差较大,故排查第三种情况。
1.
top之后发现cpu占到30%左右
找到java pid
2.
ps -mp 229148 -o THREAD,tid,time
首先显示线程列表,找到占用cpu过高的线程:
3.
将需要的线程ID转换为16进制格式
$printf "%x\n" 231486
3883e
4.
打印线程堆栈,可以看到循环体所在线程一直处于runnable状态。
$jstack 229148 |grep 3883e -A 30
相关文章推荐
- 压力测试过程中MySQL服务CPU占用率过高的问题排查思路
- 生产线上mysql占CPU过高排查实战
- java进程CPU过高问题如何排查?
- memCached客户端CPU过高问题的排查
- php-fpm CPU占用率过高的排查方法
- memCached客户端CPU过高问题的排查
- java虚拟机CPU占用率过高排查方法
- cpu过高排查
- CPU、内存利用率过高问题排查(模拟)
- java cpu过高排查
- CPU过高的排查方法
- cpu使用时间百分比过高 排查
- 生产服务器CPU占用率过高排查过程
- JAVA CPU占用过高问题排查(linux)
- 生产环境下CPU过高故障排查--top、ps、grep、printf、jstack等命令排查
- 关于Memcached客户端CPU过高问题的排查
- java虚拟机CPU占用率过高排查方法
- 一次java Cpu占用过高的排查
- java应用线上CPU过高问题排查
- (一)JAVA CPU占用过高问题排查(linux)