java线上问题排查之CPU使用率过高(一)【保姆级教程】

4 篇文章 0 订阅

线上故障排查,主要包括CPU磁盘内存以及网络。基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap

  • df:用于显示文件系统的磁盘空间使用情况。
df -h:以人类可读的方式显示磁盘空间使用情况。
df -T:显示文件系统类型。
df -i:显示inode的使用情况。
  • free:用于显示系统内存使用情况。
free -h:以人类可读的方式显示内存使用情况。
free -m:以 MB 为单位显示内存使用情况。
free -g:以 GB 为单位显示内存使用情况。
  • top:用于实时监视系统进程的活动情况。
top 命令中,你可以看到 CPU 使用率、内存使用率、进程列表以及各个进程的详细信息。
按下 q 键可以退出 top 命令。

这些命令是在 Linux 系统中进行系统监控和性能调优时经常用到的工具,能够帮助你快速了解系统的运行状况。今天我们主要讲解CPU占用过高的处理步骤和方法,系好安全带发车~

一、CPU占用过高

  1. 通过top命令查看查看各个进程的使用情况,默认按照CPU的使用率排序
    在这里插入图片描述
    top 命令显示了各个进程 CPU 使用情况 , 一般 CPU 使用率从高到低排序展示输出。其中 Load Average 显示最近 1 分钟、5 分钟和 15 分钟的系统平均负载,上图各值为2.00,0.84,0.89
    我们一般会关注 CPU 使用率最高的进程2634

  2. 使用top -H -p 2634找到该进程下占用CPU最高的线程
    在这里插入图片描述

  3. 使用printf ‘%x\n’ pid将CPU使用率最高的线程号转化为16进制
    得到pid
    在这里插入图片描述

  4. 使用jstack排查问题
    Pid得到nid
    接着直接在 jstack 中找到相应的堆栈信息jstack pid |grep ‘nid’ -C5 –color,或者将该进程的thread dump文件保存
    在这里插入图片描述

    jstack: jstack一般用于查找业务逻辑死循环,频繁gc,上下文切换过多等问题

  5. 分析dump文件
    在这里插入图片描述
    jstack命令生成的thread dump信息包含了JVM中所有存活的线程,为了分析指定线程,必须找出对应线程的调用栈
    在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可;隔段时间再执行一次stack命令获取thread dump,区分两份dump是否有差别,在nid=0x246c的线程调用栈中,发现该线程一直在执行JstackCase类第33行的calculate方法,得到这个信息,就可以检查对应的代码是否有问题。
    thread dump分析线程的状态
    在dump中,线程一般存在如下几种状态:
    1、RUNNABLE,线程处于执行中
    2、BLOCKED,线程被阻塞
    3、WAITING,线程正在等待
    一般情况下,我们会比较关注 WAITING 和 TIMED_WAITING 的部分,BLOCKED状态是一定有问题的,如果WAITING 和 TIMED_WAITING状态较多,也不正常

  • 查看状态cat jstack.log | grep “java.lang.Thread.State” | sort -nr | uniq -c
    在这里插入图片描述
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值