// 找到占用资源最多的进程
top
- top后面的参数-c可以显示进程详细的信息。top命令执行的时候还可以执行一些快捷键:
- 1,对于多核服务器,可以显示各个CPU占用资源的情况
- shift+h 显示所有的线程信息
- shift+w 将当前 top 命令的设置保存到~/.toprc 文件中,这样不用每次都执行快捷键了
// 查看系统维度的CPU负载,1s统计一次数据
vmstat -n 1
//
- load average:cpu负载,三个数字代表系统在过去1分钟、5分钟、15分钟内运行进程队列中的平均进程数量。理想情况下,每个 CPU 应该满负荷工作,并且没有等待进程,此时,平均负载 = CPU 逻辑核数。在实际生产系统中,不建议系统满负荷运行。通用的经验法则是:平均负载 = 0.7 * CPU 逻辑核数。/proc/cpuinfo 文件中读取 CPU 信息
- us:用户模式消耗的 CPU 时间百分比。该值较高时,说明用户进程消耗的 CPU 时间比较多,比如,如果该值长期超过 50%,则需要对程序算法或代码等进行优化。
- sy:内核模式消耗的 CPU 时间百分比。
- wa:IO 等待消耗的 CPU 时间百分比。该值较高时,说明 IO 等待比较严重,这可能磁盘大量作随机访问造成的,也可能是磁盘性能出现了瓶颈。
- id:处于空闲状态的 CPU 时间百分比。如果该值持续为 0,同时 sy 是 us 的两倍,则通常说明系统则面临着 CPU 资源的短缺。
// 查看由进程启动的线程使用资源情况
top -p 31071 -H
jstack -l 31071 > stack.log
// 将线程的tpid转为16进制,到stack.log中查找
printf "%x \n" 31093
grep 31093 stack.log -a3
引用的博客
CPU平均负载为多少更合理?
linux CPU占用飙升的排查方法
Linux cpuinfo 详解
发布或重启线上服务时抖动问题解决方案
JVM故障分析及性能优化系列