CPU利用率过高排查方法

发布时间 2023-04-13 00:08:25作者: anyu967

image

参考

  • 缓冲(buffer)和缓存(cache)的区别:
    • 缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
    • 缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
    • 简单来说,缓冲(buffer)是用来加速数据"写入"硬盘的,而缓存(cache)是用来加速数据从硬盘中"读取"的。

命令

top(**1分钟、5分钟、15分钟的负载情况**)   # 命令查看占用CPU高的进程PID(Ex如果CPU是单核的,则负载数值超过1就是高负载;如果CPU是四核的,则负载数值超过4就是高负载,一般认为不应该超过服务器CPU的核数)
top -Hp 进程PID 看占用CPU最高的线程PID
printf "%x\n" 23891 ⇒5d53  线程PID转16进制
jstack 进程PID > thread_stack.log  保存线程栈日志 
jstack 进程PID |grep -20 5d53   定位线程
jstat -gcutil 4241 2000

# id 空闲 CPU 占用的 CPU 百分比
# hi 硬中断请求服务占用的 CPU 百分比
# si 软中断请求服务占用的 CPU 百分比
# 运行(R)、空闲(I)、不可中断睡眠(D)、可中断睡眠(S)、僵尸(Z)、暂停(T)