Linux平均负载理解
当系统便慢时,我们常用的命令便是top或者uptime,输入uptime系统会有如下显示三个信息从左往右分别表示:系统当前时间与系统已运行时间,用户数,平均负载。平均负载这里总共有三个参数,分别不是过去1分钟,5分钟,15分钟的平均负载。假设我们在一个单 CPU 系统上看到平均负载为1.73,0.60,7.98,那么说明在过去 1 分钟内,系统有 73% 的超载,而在 15 分...
当系统便慢时,我们常用的命令便是top或者uptime,输入uptime系统会有如下显示
三个信息从左往右分别表示:系统当前时间与系统已运行时间,用户数,平均负载。
平均负载这里总共有三个参数,分别不是过去1分钟,5分钟,15分钟的平均负载。
假设我们在一个单 CPU 系统上看到平均负载为1.73,0.60,7.98,那么说明在过去 1 分钟内,系统有 73% 的超载,而在 15 分钟内,有 698 %的超载,从整体趋势来看,系统的负载在降低。
平均负载和cpu使用率很容易混淆,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。
简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU使用率没有直接的关系。
所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。
不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如
CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时两者是一致的
I/O 密集型进程,等待 I/O 也会导致平均负载升高,但CPU使用率不一定高
大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
我们可以通过模拟实际的场景去分析
首先需要在机器上预先安装 stress 和 sysstat 包
yum install -y epel-release
yum install -y stress
下载安装stress;
安装成功
yum install sysstat
sar -V
安装成功。
注:此种方式默认使用的系统的包,版本可能比较老,centos建议使用源码的方式安装,sysstat建议使用11.5.5以上版本
升级sysstat监控工具:
下载11.5.5以上版本的软件
wget http://pagesperso-orange.fr/sebastien.godard/sysstat-12.1.1.tar.gz
解压
tar xf sysstat-12.1.1.tar.gz
进入目录
cd /opt/tools/sysstat-12.1.1
设置参数
# sa_lib_dir=/usr/lib/sa\
sa_dir=/var/log/sa\
conf_dir=/etc/sysconfig \
./configure --prefix=/usr \
--disable-file-attr
&& make && make install
设置sysstat全局变量及开机启动
ln -s /安装路径/sysstat-11.5.5/sysstat /usr/local/bin/
ln -s /安装路径/sysstat-11.5.5/sysstat /etc/init.d/sysstat
chkconfig --add sysstat
chkconfig --list | grep sysstat
手动启动sysstat
# /etc/rc.d/init.d/sysstat start
查看下是否可用
sar -u 1 5
执行完以上发现不是最新版本按照以下方式:
cd /opt/tools/sysstat-12.1.1
./configure
make && make install
查看版本
[root@zst bin]# sar -V
sysstat version 12.1.1
(C) Sebastien Godard (sysstat <at> orange.fr)
验证
# pidstat -u 5 1
Linux 3.10.0-693.2.2.el7.x86_64 11/26/2018 _x86_64_ (2 CPU)
02:16:28 PM UID PID %usr %system %guest %wait %CPU CPU Command
使用stress命令,模拟CPU使用率100%(CPU 密集型进程)
$ stress --cpu 1 --timeout 600
这次模拟 I/O 压力,即不停地执行 sync(I/O 密集型进程)
$ stress -i 1 --timeout 600
系统中运行进程超出 CPU 运行能力时,就会出现等待 CPU的进程,使用stress模拟8个进程(大量进程的场景)
$ stress -c 8 --timeout 600
# 显示所有 CPU 的指标,并在间隔 5 秒输出一组数据
$ mpstat -P ALL 5 1
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:41:28 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
13:41:33 all 0.21 0.00 12.07 32.67 0.00 0.21 0.00 0.00 0.00 54.84
13:41:33 0 0.43 0.00 23.87 67.53 0.00 0.43 0.00 0.00 0.00 7.74
13:41:33 1 0.00 0.00 0.81 0.20 0.00 0.00 0.00 0.00 0.00 98.99
# 间隔 5 秒后输出一组数据,-u 表示 CPU 指标
$ pidstat -u 5 1
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:42:08 UID PID %usr %system %guest %wait %CPU CPU Command
13:42:13 0 104 0.00 3.39 0.00 0.00 3.39 1 kworker/1:1H
13:42:13 0 109 0.00 0.40 0.00 0.00 0.40 0 kworker/0:1H
13:42:13 0 2997 2.00 35.53 0.00 3.99 37.52 1 stress
13:42:13 0 3057 0.00 0.40 0.00 0.00 0.40 0 pidstat
更多推荐
所有评论(0)