Linux平均负载理解

  当系统便慢时,我们常用的命令便是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 繁忙情况的统计,跟平均负载并不一定完全对应。比如

扫描二维码关注公众号,回复: 4264737 查看本文章

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
 

猜你喜欢

转载自blog.csdn.net/xiaosong_2016/article/details/84561847