技术之道

长风破浪会有时,直挂云帆济沧海

  • 首页
  • 分类
  • 归档
  • 标签

  • 搜索
服务治理 k8s tabnine cursor github copilot ai chatgpt chatgpt ai sop 技术选型 bigdata 工具 多进程多线程 docker 计算机网络 mysql 事务 基础架构 kafka nio 分布式 服务搭建 监控 jvm 管理/成长 jenkins devops 云原生 nginx 架构 故障处理 hive spark mapreduce apm redis memcached java 性能 linux

JAVA服务CPU过高问题排查

发表于 2023-01-30 | 分类于 工具 | 0 | 阅读次数 332

JAVA服务CPU过高问题排查

  1. 使用top定位道占用cpu高的进程pid
top
top - 17:05:28 up 40 days,  6:22,  0 users,  load average: 4.63, 3.96, 3.46
Tasks:   3 total,   1 running,   2 sleeping,   0 stopped,   0 zombie
%Cpu0  : 29.6 us,  2.7 sy,  0.0 ni, 66.0 id,  0.0 wa,  0.0 hi,  1.7 si,  0.0 st
%Cpu1  : 25.9 us,  2.4 sy,  0.0 ni, 70.4 id,  0.0 wa,  0.0 hi,  1.4 si,  0.0 st
%Cpu2  : 34.5 us,  4.1 sy,  0.0 ni, 60.1 id,  0.0 wa,  0.0 hi,  1.4 si,  0.0 st
%Cpu3  : 23.1 us,  2.7 sy,  0.0 ni, 73.6 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu4  : 26.1 us,  4.4 sy,  0.0 ni, 67.8 id,  0.0 wa,  0.0 hi,  1.7 si,  0.0 st
%Cpu5  : 11.2 us,  3.1 sy,  0.0 ni, 84.4 id,  0.0 wa,  0.0 hi,  1.4 si,  0.0 st
%Cpu6  : 24.7 us,  5.1 sy,  0.0 ni, 68.5 id,  0.0 wa,  0.0 hi,  1.7 si,  0.0 st
%Cpu7  : 26.1 us,  3.1 sy,  0.0 ni, 70.2 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu8  : 26.0 us,  3.4 sy,  0.0 ni, 66.9 id,  0.0 wa,  0.0 hi,  3.7 si,  0.0 st
%Cpu9  : 14.6 us,  2.4 sy,  0.0 ni, 82.0 id,  0.0 wa,  0.0 hi,  1.0 si,  0.0 st
%Cpu10 : 30.2 us,  7.5 sy,  0.0 ni, 59.7 id,  0.0 wa,  0.0 hi,  2.7 si,  0.0 st
%Cpu11 :  8.5 us,  2.4 sy,  0.0 ni, 87.8 id,  0.0 wa,  0.0 hi,  1.4 si,  0.0 st
%Cpu12 : 13.7 us,  3.8 sy,  0.0 ni, 79.2 id,  0.0 wa,  0.0 hi,  3.4 si,  0.0 st
%Cpu13 : 40.7 us,  2.4 sy,  0.0 ni, 56.2 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu14 : 18.8 us,  3.4 sy,  0.0 ni, 74.7 id,  0.0 wa,  0.0 hi,  3.1 si,  0.0 st
%Cpu15 :  7.5 us,  3.7 sy,  0.0 ni, 87.8 id,  0.0 wa,  0.0 hi,  1.0 si,  0.0 st
KiB Mem : 65704540 total,  6177900 free, 35425588 used, 24101052 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 29786196 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                     
      1 root      20   0   12.5g   3.2g  20004 S  52.0  5.0  21323:28 java                                                                                                                                        
  43548 root      20   0   15872   4268   3056 S   0.0  0.0   0:00.03 bash                                                                                                                                        
  43564 root      20   0   59568   4420   3732 R   0.0  0.0   0:00.00 top 
  1. 使用top -H -p <pid> 命令获取线程信息,并找到占用cpu高的线程,也可以通过命令ps -mp <pid> -o THREAD,tid,time | sort -rn

    top -H -p 1
    top - 17:13:26 up 40 days,  6:30,  0 users,  load average: 2.65, 3.87, 3.75
    Threads: 180 total,   0 running, 180 sleeping,   0 stopped,   0 zombie
    %Cpu(s): 14.3 us,  3.7 sy,  0.0 ni, 80.0 id,  0.0 wa,  0.0 hi,  2.1 si,  0.0 st
    KiB Mem : 65704540 total,  5972536 free, 35453284 used, 24278720 buff/cache
    KiB Swap:        0 total,        0 free,        0 used. 29758584 avail Mem 
    
        PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                        
         51 root      20   0   12.5g   3.2g  20004 S  6.0  5.0   3479:41 java                                                                                                                           
         52 root      20   0   12.5g   3.2g  20004 S  6.0  5.0   3485:09 java                                                                                                                           
         53 root      20   0   12.5g   3.2g  20004 S  5.6  5.0   3488:47 java                                                                                                                           
         54 root      20   0   12.5g   3.2g  20004 S  5.6  5.0   3477:56 java                                                                                                                           
      43586 root      20   0   12.5g   3.2g  20004 S  3.0  5.0   0:00.29 java                                                                                                                           
         67 root      20   0   12.5g   3.2g  20004 S  2.7  5.0   1137:14 java                                                                                                                           
      43544 root      20   0   12.5g   3.2g  20004 S  2.3  5.0   0:11.16 java                                                                                                                           
      43543 root      20   0   12.5g   3.2g  20004 S  2.0  5.0   0:19.46 java                                                                                                                           
         50 root      20   0   12.5g   3.2g  20004 S  1.0  5.0 452:41.33 java                                                                                                                           
         62 root      20   0   12.5g   3.2g  20004 S  0.7  5.0 446:12.64 java                                                                                                                           
         12 root      20   0   12.5g   3.2g  20004 S  0.3  5.0  21:31.34 java                                                                                                                           
          1 root      20   0   12.5g   3.2g  20004 S  0.0  5.0   0:00.04 java                                                                                                                           
         10 root      20   0   12.5g   3.2g  20004 S  0.0  5.0   0:06.56 java 
    
  2. 将需要的线程id转换为16进制格式

    # printf "%x\n" tid
    printf "%x\n" 43565
    aa2d
    
  3. 查找具体堆栈信息

    jstack < pid >
    可以查看进程下所有堆栈信息。然后根据十六进制的线程id定位到具体有问题的堆栈和业务代码。

    也可以直接定位具体线程id。
    使用jstack查询线程的堆栈信息
    语法:jstack < pid > | grep -a 线程id(十六进制)

    可以导入到文件,本地查看。例如
    jstack < pid > | grep -A10 3d30>>/tmp/pid.log

# java
内网穿透工具frp
分布式原子提交协议2PC
  • 文章目录
  • 站点概览
lw‘Blogs

lw‘Blogs

自信人生二百年,会当水击三千里

80 日志
8 分类
40 标签
RSS
Github E-mail
Creative Commons
© 2025 京ICP备2022025426号-1