Loading

应用cpu高排查流程

现象

【Firing】- 应用异常告警
1. 容器CPU使用率超过50%
应用名称: 权限中心
产品: 业务中台-bPaaS/权限中心
用户: xxxx@ufida.com
ID[环境]:online-iuap-apcom-auth[online]
报警信息: 应用[online-iuap-apcom-auth-7b74d9d7f6-dkx22]CPU使用率偏高(当前93.59%)
开始时间: 2021-06-26 02:06:29

分析步骤

1、如果镜像中有arthas则使用arthas。
2、如果没有arthas,服务能正常访问外网则下载arthas。下载地址如下

wget https://alibaba.github.io/arthas/arthas-boot.jar

3、下载完成后按照arthas的使用办法。
4、如果容器中没有,网络和外网是隔离的则按照标准的jvm命令进行分析。

通过Arthas分析CPU场景

  • 启动arthas

    java -jar /user/local/bin/arthas-boot.jar
    
  • 查看占用cpu高的四个线程

    thread -n 4
    

    显示的前4个线程,如果线程name中有GC字样则按照内存排查。如果有arthas开头则不用关心,一定要找到业务线程并且是runnable的线程,找到以后分析堆栈中找到com.yonyou.xxx 相关的类进行分析。有时候需要多尝试执行几次命令

    614d43abdcf7d

    定位到具体的类,可以jad反编译查看源码定位问题。

  • 查询完成后退出arthas

    stop 或者 quit
    

标准JVM命令分析

  • 使用jps命令找到占用CPU高的进程编号

    jps -mv
    

    614fd9e8af787

  • 找到占用cpu最高的线程

    top -Hp pid
    

    614d76cf3a64b

  • 通过 printf “%xn” tid 将需要的线程 ID 转换为 16 进制格式。

  • 通过 jstack 命令打印线程的堆栈信息

    jstack pid |grep 0xtid -A 30
    

    614fe01a0a9ed

    找到线程之后,如果线程中有gc字样则说明是内存问题,操作如下:

  • 查看grafana监控进入到容器详情监控。

    614d3a38b0544

  • 如过cpu使用率高, 首先排查是不是频繁的fullgc导致的cpu高

    jstat -gcutil pid 1000 20
    

    614d3c84c17c7

  • 如果是java old区满了, 导致的CPU高, 具体解决方法详见应用内存高排查

posted @ 2022-03-13 18:08  Charming-Boy  阅读(164)  评论(0编辑  收藏  举报