前言:这个系列文章是我在学习倪朋飞老师的Linux性能优化实战中做的笔记记录,希望可以在这个新领域中有更多的理解。
平均负载是什么?
平均负载是一个综合评价指标,是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。
-
可运行状态(R):正在使用CPU或者正在等待CPU的进程
-
不可中断状态(D):正处于内核关键流程中的进程,这些流程是不可打断的,比如最常见的是等待硬件设备的I/O响应
使用top
、uptime
命令可以查看:
平均负载多大合适?
首先需要明确有几个CPU,当平均负载比CPU大的时候,系统已经出现了过载。一般当平均负载高于CPU数量70%的时候,就应该分析排查负载高的问题了。
# 统计CPU核数 grep 'model name' /proc/cpuinfo | wc -l
造成平均负载的系统原因是什么?
根据平均负载的定义,以下是可能造成平均负载高的原因:
-
CPU密集型进程
-
I/O密集型进程
-
大量等待CPU的进程调度
出现平均负载过载了如何排查问题?
介绍两个工具,mpstat
、pidstat
:
-
mpstat
:多核CPU性能分析工具,用来实时查看每个CPU的性能指标 -
pidstat
:进程性能分析工具,用来实时查看进程的CPU、内存、I/O以及上下文切换等性能指标
排查过程:
-
通过
uptime
指令观察到系统的平均负载问题# 使用watch命令周期执行uptime,-d选项高亮变化 watch -d uptime
-
使用
mpstat
观察CPU情况,可以大概确定是哪类问题:# -P ALL 显示所有 # 5 以5s为间隔 mpstat -P ALL 5
-
若单个CPU的
use
较高,则可能是某进程CPU占用过高造成的性能问题 -
若单个CPU的
iowait
较高,则对应的是某进程I/O密集,其他指标sys
等也类似分析 -
若全部CPU的
use
都很高,说明很可能是等待CPU的进程很多,他们都在轮番占用CPU
-
-
使用
pidstat
进一步查看分析,可以将问题定位到特定进程:# -u 报告CPU利用率 # 5 1 以5s为间隔显示1组数组 pidstat -u 5 1
-
若是存在CPU占用较高的进程,则通过该命令可以确定特定的进程
-
对于I/O密集型进程的确定,使用以下命令选项:
pidstat -d
-
若是存在等待CPU的进程很多的情况,则通过
wait
项可进一步确定该原因
-
总结
通过对于平均负载的观察,我们可以观测内核的整体性能,若出现问题,需要进一步确定是由于某CPU的CPU或I/O占比较高导致,还是系统中有大量进程导致,可以借助mpstat
命令观察CPU。对于特定进程,我们可以使用pidstat
命令来确定该进程。分析出性能瓶颈后我们在做相应的处理。