你好,我是邵亚方。
我们这节课的案例来自于我在多年以前帮助业务团队分析的一个稳定性问题。当时,业务团队反映说他们有一些服务器的 CPU 利用率会异常飙高,然后很快就能恢复,并且持续的时间不长,大概几秒到几分钟,从监控图上可以看到它像一些毛刺。
因为这类问题是普遍存在的,所以我就把该问题的定位分析过程分享给你,希望你以后遇到 CPU 利用率飙高的问题时,知道该如何一步步地分析。
CPU 利用率是一个很笼统的概念,在遇到 CPU 利用率飙高的问题时,我们需要看看 CPU 到底在忙哪类事情,比如说 CPU 是在忙着处理中断、等待 I/O、执行内核函数?还是在执行用户函数?这个时候就需要我们细化 CPU 利用率的监控,因为监控这些细化的指标对我们分析问题很有帮助。
细化 CPU 利用率监控
这里我们以常用的 top 命令为例,来看看 CPU 更加细化的利用率指标(不同版本的 top 命令显示可能会略有不同):
%Cpu(s): 12.5 us, 0.0 sy, 0.0 ni, 87.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
top 命令显示了 us、sy、ni、id、wa、hi、si 和 st 这几个指标,这几个指标之和为 100。那你可能会有疑问,细化 CPU 利用率指标的监控会不会带来明显的额外开销?答案是不会的,因为 CPU 利用率监控通常是去解析 /proc/stat 文件,而这些文件中就包含了这些细化的指标。