cpu 负载高几种情况的分析

1、cpu使用高,但是无法找到cpu高的应用
(1)使用top命令查看各个cpu的使用情况,如果没有看到明显高的应用;
(2)继续使用pidstat 查看每个进程查看cpu的使用情况
-u;默认参数,显示各进程的cpu使用
-r;显示各进程内存使用情况
-d;显示各进程的io使用情况
-w;显示各进程的上下文切换情况
-t;显示选择任务的线程的统计信息及外的额外信息
(3)使用pidstat 还看不出来,可以在此观察下top 里面的Running进程,如果Running进程数不符合,就再次使用pidstat -p pid 查看正在running的进程cpu 使用情况
(4)如果还是不行,就用ps aux|grep pid ,看能不能显示结果,如果没有说明pid 在改变,可以通过pstree 查看进程与子进程的关系;也可以用perf record -g 执行一会,然后再perf report 打印结果看下导致吸能问题的函数
(5)execsnoop 也是一个为段时进程设计的工具。

2、cpu使用率跑满100%,如果处理
(1) 使用perf top 可以实时查看占用cpu最多的进程和函数
(2)使用perf record -g 和perf report 查看分析性能问题

3、系统中出现大量不可中断的进程和僵尸进程如何处理
top显示中,D状态为不可中断进程,会导致i/o升高,负载升高。
Z状态是僵尸进程,也就是没有随父进程回收的孤儿进程。
iowait分析:使用pidstat 1 10 ,s观察cpu和i/o的使用情况
(1)从top命令中找到D状态的pid,使用 pidstat -d -p pid 1 3
(2)如果无异常,使用pidstat 去掉进程号 来观察所有进程的I/O 使用情况,找到具体导致I/O 问题的进程
(3)找到影响I/O的进程之后,通过strace -f -T -tt -p pid 跟踪进程调用,看下进程是否变成Z僵尸进程
(4)进一步使用perf record -g 等待一会之后,使用perf report 定位到我们发现的僵尸进程,按回车健展开调用栈,找到影响I/O的函数。
僵尸进程分析,先找到僵尸进程的父进程进行处理。pstree -aps pid 找父进程。

4、软中断%si 消耗cpu过高,如何处理
(1)使用top命令查询cpu的使用情况,如果看到%si(softirqs)占用cpu高
(2)使用watch -d cat /proc/softirqs 查看文件内容变化情况,查看NET_RX,是否收包导致的cpu软中断
(3)使用sar -n DEV 1 查看网络收发情况
(4)再就是抓包呗

5、平均负载高于cpu 数量70%,就要开始分析负载高的问题
cpu密集
(1)使用uptime 查看平均负载;
(2)使用mpstat 查看cpu使用率的变化;
(3)使用pidstat -u 5 1 可以找到

I/O密集
(1)watch -d uptime 查看平均负载的变化
(2)mpstat -P ALL 5 查看cpu 使用率变化
(3)使用pidstat -u 5 1 查看使用cpu高的进程导致iowait升高

进程繁多场景
(1)uptime 查看平均负载
(2)pidstat -u 5 1 查看进程情况
(3)查看是否有大量超出cpu进程的运行导致cpu过载

6、大量cpu上下文切换
(1)vmstat 分析系统的cpu上下文切换和中断次数(irqs)
cs:每秒上下文切换次数
in:每秒中断的次数 (cat /proc/softirqs)
r:就绪队列的长度
b:处于不可中断随眠状态的进程数
cswch 自愿切换:指进程无法获取所需资源(I/O,内存),导致的上下文切换
nvcswch 非自愿切换:进程时间片已到,被系统强制调度,发生上下文切换,如大量进程抢占cpu,容易引发非资源切换
中断次数:变多则表示cpu 被中断处理程序占用,通过watch -d cat /proc/interrupts 文件分析增长
(2)pidstat -w 5 可以看到具体进程的上下文切换
(3)pidstat -wt 1 输出线程上下文切换的指标

top命令进程状态:
R 运行再cpu的就绪队列中
D 不可中断状态睡眠,一般是 是跟硬件交互 不允许被打断
S 可中断状态睡眠,等待某个事件而被系统挂起,被唤醒后转入R状态
Z zombie僵尸进程
I 空闲状态,用在不可中断睡眠的内核线程上

如果通过vmstat 查到是不可中断状态进程数增多,则需要检查I/O,用dstat或者sar分析。
如果是运行状态进程增多,则继续用top和pidstat,找出处于运行状态是什么进程,然后使用进程分析工具strace等分析。

碰到iowait 升高时,先用dstat、pidstat工具,确认是否磁盘i/od的问题,然后找出对应进程
等待I/O的进程一般时不可中断的,使用ps找到d状态(不可中断)的进程,多为可疑进程,在i/o操作之后可能变为僵尸进程,所以无法使用strace 检查,需要使用到pref record /report检查。

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注