一. 工具与指标 #
二. 最常用的cpu工具 #
最常用的cpu工具 工具中指标之间的关系
三. cpu优化案例 #
1. 上下文切换的案例。 #
自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。 非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。
先用 vmstat ,查看了系统的上下文切换次数和中断次数;然后通过pidstat ,观察了进程的自愿上下文切换和非自愿上下文切换情况;最后通过 pidstat ,观察了线程的上下文切换情况,找出了上下文切换次数增多的根源,也就是我们的基准测试工具 sysbench。
2. 进程 CPU 使用率升高的案例 #
可能代码里有死循环
3. 不可中断进程和僵尸进程的案例 #
先用 top 观察到了 iowait 升高的问题,并发现了大量的不可中断进程和僵尸进程;接着用 dstat 发现是这是由磁盘读导致的,于是又通过 pidstat 找出了相关的进程。但我们用 strace 查看进程系统调用却失败了,最终还是用 perf 分析进程调用链,才发现根源在于磁盘直接 I/O 。 僵尸进程是因为父进程没有回收子进程的资源而出现的,那么,要解决掉它们,就要找到它们的根儿,也就是找出父进程,然后在父进程里解决。
4.软中断的案例。 #
通过 top 观察到,系统的软中断 CPU 使用率升高;接着查看/proc/softirqs, 找到了几种变化速率较快的软中断;然后通过 sar 命令,发现是网络小包的问题,最后再用 tcpdump ,找出网络帧的类型和来源,确定是一个SYN FLOOD 攻击导致的。
参考: #
- «Linux性能优化实战 - 11 - 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?» 倪朋飞
- «Linux性能优化实战 - 04讲基础篇:经常说的CPU上下文切换是什么意思(下)» 倪朋飞