性能问题分析-CPU偏高

问题:CPU偏高是什么原因?怎么分析?

CPU偏高分为:System的CPU偏高和UseCPU偏高。

1、use cpu高

现象:压测过程中,使用top命令查看系统资源占用情况,us cpu过高,超过50%以上。

原因:UseCPU偏高说明应用程序本身比较繁忙

排查手段:

  (1)使用top命令是哪个进程消耗CPU高

  (2)再找到CPU消耗高的线程:top -H -p 进程号

  (3)把线程号转换成16进制:printf "%x\n" 线程号

  (4)再用jstack命令分析这个线程是在干什么:jstack 进程号 | grep 16进制的线程号

  (5)通过JProfiler的CPU Views视图的层层分析,可以清楚的找到造成CPU高的原因

 

分析步骤:

1.jstack查看运行程序的java stack和native stack信息。如果运行的java程序出现线程hang住,jstack就非常有用。
ps -ef | grep java
 
top -H -p1893
 
printf "%x\n" 1896 (将线程ID转化为16进制)
jstack 1893 | grep 768 (查看该线程的状态)
 
若线程状态为BLOCKED、WAITING这俩状态,说明线程运行是有问题的,线程死锁一般是递归调用,循环引起的。
 

另一种方式

ps -ef | grep java
 
jstack 1893 >1.txt 重定向到文件1.txt中
 
vi 1.txt (查看文件内容,搜索WAITING、BLOCKED状态的线程)
 
 

2、system cpu高

现象:压测过程中,使用top命令查看系统资源占用情况,sy cpu过高,超过50%以上。

原因:内核调用,IO导致的,看IO是否使用频繁

排查手段:

  (1)首先查看磁盘繁忙程度、磁盘的队列(nmon、sar),查看diskbusy,若diskbusy超过30%以上就可以称作IO繁忙;

      (2)IO繁忙的话,查看磁盘中IO的排序队列(iostat),看具体是read还是write繁忙,询问开发人员为什么读/写这么高,找出原因;

              读高:大量读取数据造成内存不够引起;

              写高:需要减少写的频率;

  (3)如果IO不繁忙,也就是磁盘没有问题,则使用strace查看系统内核调用情况,具体内核调用什么比较频繁;

           

  

posted @ 2021-07-30 10:10  西瓜汁拌面  阅读(895)  评论(0编辑  收藏  举报