JVM CPU高负载的排查办法

JVM CPU高负载的排查办法

1.执行top -c命令,找到cpu最高的进程的id

2.执行top -H -p pid ,这个命令就能显示刚刚找到的进程的所有线程的资源消耗情况。找到CPU负载高的线程tid 8627, 把这个数字转换成16进制,21B3(10进制转16进制,用linux命令: printf %x 172)。

3.执行jstack -l pid,拿到进程的线程dump文件。这个命令会打出这个进程的所有线程的运行堆栈。

4.用记事本打开这个文件,搜索“21B3”,就是搜一下16进制显示的线程id。搜到后,下面的堆栈就是这个线程打出来的。排查问题从这里深入。

5.打出内存的dump文件
执行命令,jmap -dump:format=b,file=/export/Logs/anycall.jd.local/HeapDump.bin;拿到这个dump文件后,通过MemoryAnalyzer.exe工具将其打开。

说明一点,这个工具默认打开的文件大小为512M,如果dump文件过大,需要修改这个值,找到安装目录下的这个文件MemoryAnalyzer.ini,修改。

top 命令可以查看进程的CPU、内存等资源的使用情况。

在top命令运行过程中可以通过top的内部命令做显示方式的控制。

  • 通过top观察cpu很空闲,但是负载比较高的情况:

    load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。
    出现此种情况时,可能是由于僵死进程导致的。可以通过指令 ps -axjf 查看是否存在 D 状态进程。
    D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。

    1 - 开启或关闭显示所有cpu使用详细情况
    l - 关闭或开启第一部分第一行 top 信息的表示
    t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
    m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
    N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述)
    P - 以 CPU 占用率大小的顺序排列进程列表 (第三部分后述)
    M - 以内存占用率大小的顺序排列进程列表 (第三部分后述)
    h - 显示帮助
    n - 设置在进程列表所显示进程的数量
    q - 退出 top
    s - 改变画面更新频率(输入数字)

vmstat命令可以查看系统整体的cpu,内存的使用情况

  • r: 表示系统中 CPU 等待处理的线程。由于 CPU 每次只能处理一个线程,所以,该数值越大,通常表示系统运行越慢。

  • us:用户模式消耗的 CPU 时间百分比。该值较高时,说明用户进程消耗的 CPU 时间比较多,比如,如果该值长期超过 50%,则需要对程序算法或代码等进行优化。

  • sy:内核模式消耗的 CPU 时间百分比。

  • wa:IO 等待消耗的 CPU 时间百分比。该值较高时,说明 IO 等待比较严重,这可能磁盘大量作随机访问造成的,也可能是磁盘性能出现了瓶颈。

  • id:处于空闲状态的 CPU 时间百分比。如果该值持续为 0,同时 sy 是 us 的两倍,则通常说明系统则面临着 CPU 资源的短缺。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值