TheRiver | blog

You have reached the world's edge, none but devils play past here

0%

理解平均负载

前言

在极客时间上学习的Linux性能优化实战
这里把自己实践的过程记录下,文章会援引很多课程中的资料,详情还是建议点击上面的链接去购买课程

什么是平均负载

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。

所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。

不可中断状态的进程,则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。

比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。
所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。

查看平均负载

[root@localhost /]# uptime
 08:18:23 up  9:10,  2 users,  load average: 0.44, 0.68, 0.86

[root@localhost /]# date
2019年 07月 31日 星期三 08:18:57 CST

[root@localhost /]# who
root     tty1         2019-07-30 23:08
root     pts/0        2019-07-30 23:08 (192.168.1.5)

[root@localhost /]# who -b
系统引导 2019-07-30 23:08

uptime的结果:

08:18:23      //当前时间
up  9:10     //系统运行时间
2 users      //登录用户数
0.44        //过去1分钟的平均负载
0.68        //过去5分钟的平均负载
0.86        //过去15分钟的平均负载

平均负载是否合理

平均负载可以理解为平均活跃进程数,即平均负载等于CPU个数的时候,是比较理想的,CPU被充分利用.超过CPU个数则负载高

查看CPU个数

[root@localhost ~]# grep 'model name' /proc/cpuinfo | wc -l
1

[root@localhost ~]# grep 'model name' /proc/cpuinfo 
model name    : AMD Ryzen 5 2600X Six-Core Processor

网上看的另一种查看的方法:

[root@localhost ~]# cat /proc/cpuinfo 
processor    : 0
vendor_id    : AuthenticAMD
cpu family    : 23
model        : 8
model name    : AMD Ryzen 5 2600X Six-Core Processor
stepping    : 2
microcode    : 0x800820b
cpu MHz        : 3599.994
cache size    : 512 KB
physical id    : 0
siblings    : 1
core id        : 0
cpu cores    : 1
apicid        : 0
initial apicid    : 0
fpu        : yes
fpu_exception    : yes
cpuid level    : 13
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw arat xsaveopt fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap
bogomips    : 7199.98
TLB size    : 2560 4K pages
clflush size    : 64
cache_alignment    : 64
address sizes    : 43 bits physical, 48 bits virtual
power management:

其中physical id代表第几个CPU,cpu cores代表CPU的核数.即1个CPU

与实际一致:

根据网上说的,平均负载超出70%就需要重视了,可以排查下导致负载高的原因.

模拟测试

需要两个2个工具:

安装stress:

yum install -y epel-release
yum install -y stress

第二部安装的时候报错了:

[root@localhost ~]# yum install -y stress
已加载插件:fastestmirror
base                                                                                                   | 3.6 kB  00:00:00     


 One of the configured repositories failed (未知),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Disable the repository, so yum won't use it by default. Yum will then
        just ignore the repository until you permanently enable it again or use
        --enablerepo for temporary usage:

            yum-config-manager --disable <repoid>

     4. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again

网上找了种解决方法:

vim /etc/yum.repos.d/epel.repo
修改,让baseurl生效,注释掉metalink
baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
#metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch

然后,就可以了:

[root@localhost ~]# stress
`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...
 -?, --help         show this help statement        显示帮助信息
     --version      show version statement            显示版本号
 -v, --verbose      be verbose
 -q, --quiet        be quiet                        不显示运行信息
 -n, --dry-run      show what would have been done    显示已完成的指令情况
 -t, --timeout N    timeout after N seconds            指定运行N秒后停止
     --backoff N    wait factor of N microseconds before work starts    等待N微妙后开始运行
 -c, --cpu N        spawn N workers spinning on sqrt()                    产生n个进程 每个进程都反复不停的计算随机数的平方根
 -i, --io N         spawn N workers spinning on sync()                    产生n个进程 每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上
 -m, --vm N         spawn N workers spinning on malloc()/free()    产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数
     --vm-bytes B   malloc B bytes per vm worker (default is 256MB)    指定malloc时内存的字节数 (默认256MB)
     --vm-stride B  touch a byte every B bytes (default is 4096)    
     --vm-hang N    sleep N secs before free (default none, 0 is inf)    指定在free时的秒数
     --vm-keep      redirty memory instead of freeing and reallocating
 -d, --hdd N        spawn N workers spinning on write()/unlink()
     --hdd-bytes B  write B bytes per hdd worker (default is 1GB)

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).

安装sysstat:

yum install sysstat

安装完后可以用到这个包的两个命令: mpstat pidstat

mpstat

mpstat是Multiprocessor Statistics的缩写,是实时监控工具,报告与cpu的一些统计信息这些信息都存在/proc/stat文件中,在多CPU系统里,其不但能查看所有的CPU的平均状况的信息,而且能够有查看特定的cpu信息,mpstat最大的特点是:可以查看多核心的cpu中每个计算核心的统计数据;而且类似工具vmstat只能查看系统的整体cpu情况。

详解mpstat、iostat、sar、vmstat命令的使用

[root@localhost ~]# mpstat
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain)     2019年08月01日     _x86_64_    (1 CPU)

[root@localhost ~]# mpstat --help
用法: mpstat [ 选项 ] [ <时间间隔> [ <次数> ] ]
选项:
[ -A ] [ -u ] [ -V ] [ -I { SUM | CPU | SCPU | ALL } ]
[ -P { <cpu> [,...] | ON | ALL } ]

pidstat

pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息

linux命令—pidstat

[root@localhost ~]# pidstat
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain)     2019年08月01日     _x86_64_    (1 CPU)

06时58分02秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
06时58分02秒     0         1    0.01    0.05    0.00    0.06     0  systemd
06时58分02秒     0         2    0.00    0.00    0.00    0.00     0  kthreadd
06时58分02秒     0         3    0.00    0.00    0.00    0.00     0  ksoftirqd/0
06时58分02秒     0         6    0.00    0.01    0.00    0.01     0  kworker/u256:0
06时58分02秒     0       137    0.00    0.02    0.00    0.02     0  rcu_sched
06时58分02秒     0       138    0.00    0.04    0.00    0.04     0  rcuos/0
06时58分02秒     0       266    0.00    0.00    0.00    0.00     0  watchdog/0
06时58分02秒     0       274    0.00    0.00    0.00    0.00     0  khubd
06时58分02秒     0       280    0.00    0.02    0.00    0.02     0  khugepaged
06时58分02秒     0       292    0.00    0.00    0.00    0.00     0  kworker/u256:1
06时58分02秒     0       812    0.00    0.00    0.00    0.00     0  scsi_eh_0
06时58分02秒     0      2024    0.00    0.01    0.00    0.01     0  kworker/0:1H
06时58分02秒     0      2025    0.00    0.02    0.00    0.02     0  xfsaild/dm-1
06时58分02秒     0      2098    0.00    0.00    0.00    0.00     0  systemd-journal
06时58分02秒     0      2133    0.01    0.00    0.00    0.01     0  systemd-udevd
06时58分02秒     0      3729    0.00    0.00    0.00    0.00     0  auditd
06时58分02秒    81      3762    0.00    0.00    0.00    0.00     0  dbus-daemon
06时58分02秒     0      3763    0.00    0.00    0.00    0.00     0  systemd-logind
06时58分02秒     0      3769    0.00    0.00    0.00    0.00     0  rsyslogd
06时58分02秒    70      3770    0.00    0.00    0.00    0.00     0  avahi-daemon
06时58分02秒     0      3771    0.01    0.01    0.00    0.02     0  tuned
06时58分02秒     0      4633    0.00    0.00    0.00    0.00     0  iprinit
06时58分02秒     0      4635    0.00    0.00    0.00    0.00     0  iprupdate
06时58分02秒     0      5078    0.00    0.00    0.00    0.00     0  login
06时58分02秒     0      5171    0.00    0.00    0.00    0.00     0  master
06时58分02秒     0      5727    0.00    0.01    0.00    0.01     0  sshd
06时58分02秒     0      8944    0.00    0.01    0.00    0.01     0  sshd
06时58分02秒     0      8946    0.00    0.00    0.00    0.00     0  bash
06时58分02秒   999     15236    0.00    0.00    0.00    0.00     0  polkitd
06时58分02秒     0     15644    0.00    0.01    0.00    0.01     0  kworker/0:0
06时58分02秒     0     15901    0.00    0.01    0.00    0.01     0  kworker/0:1
06时58分02秒     0     16170    0.00    0.00    0.00    0.00     0  kworker/0:2
06时58分02秒     0     16346    0.00    0.00    0.00    0.00     0  pidstat

CPU密集型进程/大量使用CPU进程

stress

[root@localhost ~]# stress -c 1 -t 600
stress: info: [17214] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

uptime

[root@localhost ~]# uptime
 07:17:32 up  1:05,  6 users,  load average: 1.05, 0.54, 0.42

mpstat

[root@localhost ~]# mpstat -P ALL 5 3
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain)     2019年08月01日     _x86_64_    (1 CPU)

07时16分51秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07时16分56秒  all   99.40    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00    0.00
07时16分56秒    0   99.40    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00    0.00

07时16分56秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07时17分01秒  all   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00
07时17分01秒    0   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00

07时17分01秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07时17分06秒  all   99.20    0.00    0.80    0.00    0.00    0.00    0.00    0.00    0.00    0.00
07时17分06秒    0   99.20    0.00    0.80    0.00    0.00    0.00    0.00    0.00    0.00    0.00

平均时间:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
平均时间:  all   99.40    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00    0.00
平均时间:    0   99.40    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00    0.00

pidstat

[root@localhost ~]# pidstat -u 5 3
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain)     2019年08月01日     _x86_64_    (1 CPU)

07时16分54秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07时16分59秒     0      2025    0.00    0.20    0.00    0.20     0  xfsaild/dm-1
07时16分59秒     0     16706    0.00    0.20    0.00    0.20     0  sshd
07时16分59秒     0     17215   98.61    0.00    0.00   98.61     0  stress
07时16分59秒     0     17429    0.00    0.20    0.00    0.20     0  top
07时16分59秒     0     17532    0.00    0.20    0.00    0.20     0  pidstat

07时16分59秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07时17分04秒     0     17215   99.20    0.00    0.00   99.20     0  stress
07时17分04秒     0     17532    0.00    0.40    0.00    0.40     0  pidstat

07时17分04秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
07时17分09秒     0         1    0.00    0.20    0.00    0.20     0  systemd
07时17分09秒     0     17215   98.80    0.00    0.00   98.80     0  stress
07时17分09秒     0     17429    0.20    0.20    0.00    0.40     0  top
07时17分09秒     0     17532    0.00    0.20    0.00    0.20     0  pidstat

平均时间:   UID       PID    %usr %system  %guest    %CPU   CPU  Command
平均时间:     0         1    0.00    0.07    0.00    0.07     -  systemd
平均时间:     0      2025    0.00    0.07    0.00    0.07     -  xfsaild/dm-1
平均时间:     0     16706    0.00    0.07    0.00    0.07     -  sshd
平均时间:     0     17215   98.87    0.00    0.00   98.87     -  stress
平均时间:     0     17429    0.07    0.13    0.00    0.20     -  top
平均时间:     0     17532    0.00    0.27    0.00    0.27     -  pidstat
选项 说明
%usr 在统计周期内,用户态任务和其子任务耗时统计(ms),包括或者不包括调优时间,注意不包括运行虚拟处理器时间
%system 在统计周期内,内核态任务和其子任务耗时统计(ms)
%guest 在统计周期内,虚拟态任务和其子任务耗时统计(ms)

top

Tasks: 349 total,   3 running, 346 sleeping,   0 stopped,   0 zombie
%Cpu(s):100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   3869020 total,   775460 used,  3093560 free,     1232 buffers
KiB Swap:  4079612 total,        0 used,  4079612 free.   563764 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                  
 17215 root      20   0    7260     96      0 R 99.4  0.0   3:17.02 stress                                                   
     1 root      20   0   49904   4180   2472 S  0.0  0.1   0:01.68 systemd

CPU密集型进程:使用大量CPU导致平均负载升高

IO密集型

stress

[root@localhost ~]# stress -i 1 --hdd 1 -t 600
stress: info: [23947] dispatching hogs: 0 cpu, 1 io, 0 vm, 1 hdd

uptime

[root@localhost ~]# uptime
 08:09:24 up  1:57,  9 users,  load average: 2.78, 1.84, 1.80

mpstat

[root@localhost sysstat-12.1.5]# mpstat -P ALL 5 3
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain)     2019年08月01日     _x86_64_    (1 CPU)

08时07分33秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08时07分38秒  all    0.21    0.00   35.48   50.83    0.00   13.49    0.00    0.00    0.00    0.00
08时07分38秒    0    0.21    0.00   35.48   50.83    0.00   13.49    0.00    0.00    0.00    0.00

08时07分38秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08时07分43秒  all    0.21    0.00   25.51   61.73    0.00   12.55    0.00    0.00    0.00    0.00
08时07分43秒    0    0.21    0.00   25.51   61.73    0.00   12.55    0.00    0.00    0.00    0.00

08时07分43秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08时07分48秒  all    0.21    0.00   25.47   68.63    0.00    5.68    0.00    0.00    0.00    0.00
08时07分48秒    0    0.21    0.00   25.47   68.63    0.00    5.68    0.00    0.00    0.00    0.00

平均时间:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
平均时间:  all    0.21    0.00   28.83   60.36    0.00   10.60    0.00    0.00    0.00    0.00
平均时间:    0    0.21    0.00   28.83   60.36    0.00   10.60    0.00    0.00    0.00    0.00

pidstat

[root@localhost wang]# pidstat -u 5 3
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain)     2019年08月01日     _x86_64_    (1 CPU)

08时07分35秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
08时07分40秒     0         3    0.00    0.83    0.00    0.83     0  ksoftirqd/0
08时07分40秒     0       137    0.00    0.21    0.00    0.21     0  rcu_sched
08时07分40秒     0      2024    0.00    0.21    0.00    0.21     0  kworker/0:1H
08时07分40秒     0     23777    0.00    0.21    0.00    0.21     0  kworker/0:1
08时07分40秒     0     23805    0.00    0.41    0.00    0.41     0  kworker/0:3
08时07分40秒     0     23807    0.00   11.41    0.00   11.41     0  kworker/u256:2
08时07分40秒     0     23942    0.21    0.21    0.00    0.41     0  top
08时07分40秒     0     23948    0.00    2.49    0.00    2.49     0  stress
08时07分40秒     0     23949    0.00   25.73    0.00   25.73     0  stress
08时07分40秒     0     24011    0.00    0.41    0.00    0.41     0  pidstat

08时07分40秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
08时07分45秒     0         3    0.00    0.61    0.00    0.61     0  ksoftirqd/0
08时07分45秒     0       266    0.00    0.20    0.00    0.20     0  watchdog/0
08时07分45秒     0     23777    0.00    0.61    0.00    0.61     0  kworker/0:1
08时07分45秒     0     23805    0.00    0.41    0.00    0.41     0  kworker/0:3
08时07分45秒     0     23806    0.00    0.82    0.00    0.82     0  kworker/0:4
08时07分45秒     0     23807    0.00   15.95    0.00   15.95     0  kworker/u256:2
08时07分45秒     0     23942    0.61    0.82    0.00    1.43     0  top
08时07分45秒     0     23948    0.00    6.13    0.00    6.13     0  stress
08时07分45秒     0     23949    0.00   36.40    0.00   36.40     0  stress
08时07分45秒     0     24011    0.20    0.20    0.00    0.41     0  pidstat

08时07分45秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
08时07分50秒     0         3    0.00    0.21    0.00    0.21     0  ksoftirqd/0
08时07分50秒     0       138    0.00    0.21    0.00    0.21     0  rcuos/0
08时07分50秒     0     23806    0.00    0.42    0.00    0.42     0  kworker/0:4
08时07分50秒     0     23807    0.00    1.49    0.00    1.49     0  kworker/u256:2
08时07分50秒     0     23942    0.21    0.00    0.00    0.21     0  top
08时07分50秒     0     23948    0.00    0.21    0.00    0.21     0  stress
08时07分50秒     0     23949    0.00    4.67    0.00    4.67     0  stress
08时07分50秒     0     23955    0.21    0.00    0.00    0.21     0  watch
08时07分50秒     0     24011    0.00    0.21    0.00    0.21     0  pidstat

平均时间:   UID       PID    %usr %system  %guest    %CPU   CPU  Command
平均时间:     0         3    0.00    0.55    0.00    0.55     -  ksoftirqd/0
平均时间:     0       137    0.00    0.07    0.00    0.07     -  rcu_sched
平均时间:     0       138    0.00    0.07    0.00    0.07     -  rcuos/0
平均时间:     0       266    0.00    0.07    0.00    0.07     -  watchdog/0
平均时间:     0      2024    0.00    0.07    0.00    0.07     -  kworker/0:1H
平均时间:     0     23777    0.00    0.28    0.00    0.28     -  kworker/0:1
平均时间:     0     23805    0.00    0.28    0.00    0.28     -  kworker/0:3
平均时间:     0     23806    0.00    0.42    0.00    0.42     -  kworker/0:4
平均时间:     0     23807    0.00    9.71    0.00    9.71     -  kworker/u256:2
平均时间:     0     23942    0.35    0.35    0.00    0.69     -  top
平均时间:     0     23948    0.00    2.98    0.00    2.98     -  stress
平均时间:     0     23949    0.00   22.47    0.00   22.47     -  stress
平均时间:     0     23955    0.07    0.00    0.00    0.07     -  watch
平均时间:     0     24011    0.07    0.28    0.00    0.35     -  pidstat

[root@localhost wang]# pidstat -d 5 3
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain)     2019年08月01日     _x86_64_    (1 CPU)

08时08分32秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
08时08分37秒     0     23948      0.00      0.00  33647.20  stress
08时08分37秒     0     23949      0.00 838860.80 150474.40  stress

08时08分37秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
08时08分42秒     0       292      0.00   6036.21      0.00  kworker/u256:1
08时08分42秒     0     23949      0.00 441505.68 236369.68  stress

08时08分42秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
08时08分47秒     0       292      0.00  34784.07      0.00  kworker/u256:1
08时08分47秒     0     23948      0.00      0.00  60896.44  stress
08时08分47秒     0     23949      0.00 439654.51 112327.88  stress

平均时间:   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
平均时间:     0       292      0.00  13401.65      0.00  kworker/u256:1
平均时间:     0     23948      0.00      0.00  31591.74  stress
平均时间:     0     23949      0.00 577727.82 166042.15  stress

top

[root@localhost ~]# top
top - 08:09:12 up  1:57,  9 users,  load average: 2.74, 1.80, 1.79
Tasks: 361 total,   2 running, 359 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us, 28.2 sy,  0.0 ni,  0.0 id, 59.9 wa,  0.0 hi, 11.5 si,  0.0 st
KiB Mem:   3869020 total,  1910484 used,  1958536 free,     1232 buffers
KiB Swap:  4079612 total,        0 used,  4079612 free.  1653112 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                  
 23949 root      20   0    8164   1124     32 D 21.6  0.0   0:35.57 stress                                                   
   292 root      20   0       0      0      0 D  9.6  0.0   0:10.20 kworker/u256:1      

以上大量IO导致平均负载升高,cpu占用并不高

大量等待CPU的进程

stress

[root@localhost ~]# stress -c 8 -t 600
stress: info: [24363] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd

uptime

[root@localhost ~]# uptime
 08:15:23 up  2:03,  9 users,  load average: 7.63, 4.09, 2.59

mpstat

[root@localhost sysstat-12.1.5]# mpstat -P ALL 5 3
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain)     2019年08月01日     _x86_64_    (1 CPU)

08时15分27秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08时15分32秒  all   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08时15分32秒    0   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00

08时15分32秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08时15分37秒  all   99.40    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08时15分37秒    0   99.40    0.00    0.60    0.00    0.00    0.00    0.00    0.00    0.00    0.00

08时15分37秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08时15分42秒  all   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08时15分42秒    0   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00

平均时间:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
平均时间:  all   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00
平均时间:    0   99.60    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00

pidstat

wait值为0,明天再定位
-c 40,wait也是0,不知道什么原因.cpu性能太好?先不管了,以后再说.

top

[root@localhost ~]# top
top - 08:21:56 up  2:10,  4 users,  load average: 7.72, 5.76, 3.78
Tasks: 355 total,  10 running, 345 sleeping,   0 stopped,   0 zombie
%Cpu(s):100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   3869020 total,   820136 used,  3048884 free,     1232 buffers
KiB Swap:  4079612 total,        0 used,  4079612 free.   604588 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                  
 25022 root      20   0    7260     92      0 R 12.6  0.0   0:19.44 stress                                                   
 25023 root      20   0    7260     92      0 R 12.6  0.0   0:19.44 stress                                                   
 25024 root      20   0    7260     92      0 R 12.6  0.0   0:19.44 stress                                                   
 25025 root      20   0    7260     92      0 R 12.6  0.0   0:19.44 stress                                                   
 25026 root      20   0    7260     92      0 R 12.6  0.0   0:19.44 stress                                                   
 25020 root      20   0    7260     92      0 R 12.3  0.0   0:19.43 stress                                                   
 25021 root      20   0    7260     92      0 R 12.3  0.0   0:19.43 stress                                                   
 25027 root      20   0    7260     92      0 R 12.3  0.0   0:19.43 stress   

问题

  • pidstat不显示%wait

安装新版本的sysstat:下载地址

  • iowait无法升高

stress -i 时刷新内存缓冲区数据到磁盘,新装的虚拟机缓冲区比较小,没有那么大的压力.只是系统调用导致的cpu升高

可以用stress -i 1 –hdd 1 -t 600 //–hdd表示读写临时文件

ending

----------- ending -----------