美文网首页
线上cpu过载问题

线上cpu过载问题

作者: Figo_OU | 来源:发表于2021-04-27 16:03 被阅读0次

线上性能调优:

问题:某个接口A,查询要很慢,但没有报错。那要怎么去分析问题到底在哪里呢?

  1. top指令,首先看看cpu占用率和内存使用率。如果是由于内存溢出导致的问题,内存占用和cpu负载都会很高。因为该过程伴随着不断的gc。可以参照上一篇文章。 线上发生内存爆满问题处理

  2. 非内存问题,

先用top指令
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                                                                                                                                         
22276 root      20   0 6313408 509152  14108 S   189.0  3.1   1:37.89 java                                                                                                                                                           
22329 root      20   0 6330880 526296  14120 S   1.0  3.2   1:43.78 java                                                                                                                                                           
29462 root      20   0 7070076 767584  14208 S   1.0  4.7   2:24.71 java     

root@RobotDispatch-Nginx-S-PRD ~]# jcmd
22276 /var/lib/xxx1.jar 
29462 /var/lib/xxx2.jar  
22329 /var/lib/xxx3.jar  

jstack 29462 > a.log,然后就在a.log中看相关的堆栈信息。

  1. 发生死锁,一般都会检测出来

  2. 死循环,

  3. 使用top -H -p 29462 看29462对应的进程中具体的线程运行状况。假设线程29491的cpu占用率很高,那么我们就看看里面详情。打开计算器,计算29491对应的16进制值。

    7333
    那么我们就知道这个nid是7333了。然后打开刚刚的a.log堆栈信息。vi a.log
    然后shilt+:,进入查找模式,输入/7333,就会定位到对应的堆栈信息。 问题位置
  1. 如果上述的问题都没有找到原因,可以多用几次jstack命令。然后对比几次的日志文件。看程序运行到那行代码停顿时间比较久。

    例如你10个用户线程,日志输出都堆积在这个方法的第24行。那么可能第24行有点问题。 卡顿行

相关文章

网友评论

      本文标题:线上cpu过载问题

      本文链接:https://www.haomeiwen.com/subject/optprltx.html