可以查询机器负载的命令

三个命令:w, uptime, top

[www@cloud-test-env79 ~]$ w
 16:36:59 up  2:23,  1 user,  load average: 19.02, 18.69, 18.31
 USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
 www      pts/1    10.3.2.67        16:36    2.00s  0.00s  0.00s w


[www@cloud-test-env79 ~]$ uptime
 16:40:56 up  2:27,  1 user,  load average: 18.40, 18.24, 18.20


top - 16:41:09 up  2:27,  1 user,  load average: 18.25, 18.21, 18.19

什么是机器负载Load? 平均负载 Load Average

Load 就是对计算机干活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a compute system is doing)简单的说是进程队列的长度。Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load

如何判断Over Load

一般来说,根据CPU数量判断,如果平均负载始终再1.2以下,机器是2CPU。那么基本不会出现CPU不够用的情况。 也就是Load平均要小于CPU的数量,一般会根据15分钟那个load的平均值。

一般而言,服务器的合理负载是CPU核数*2。也就是说对于8核的CPU,负载在16以内表明机器运行很稳定流畅。如果负载超过16了,就说明服务器的运行有一定的压力了。

我们如何排查机器高负载

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动。

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 18  0  16640 221116      0 1426276    0    1   133   195 2053  591 78 14  7  0  0
 23  0  16640 245128      0 1426836    0    0     0    66 4208 1059 86 14  0  0  0
 19  0  16640 227160      0 1427340    0    0     0    37 4144 1040 85 15  0  0  0
 16  0  16640 259528      0 1428076    0    0     0   329 4090 1001 85 15  0  0  0
 13  0  16640 261376      0 1428476    0    0     0     0 4087 1042 84 16  0  0  0

字段说明

Procs(进程):
    r: 运行队列中进程数量 (如果长期大于1,说明cpu不足,需要增加cpu。)
    b: 等待IO的进程数量 (比如正在等待I/O、或者内存交换等。)
    Memory(内存):
    swpd: 使用虚拟内存大小
    free: 可用内存大小
    buff: 用作缓冲的内存大小
    cache: 用作缓存的内存大小
Swap:
    si: 每秒从交换区写到内存的大小
    so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
    bi: 每秒读取的块数
    bo: 每秒写入的块数
system:
    in: 每秒中断数,包括时钟中断
    cs: 每秒上下文切换数
CPU(以百分比表示)
    us: 用户进程执行时间(user time)
    sy: 系统进程执行时间(system time)
    id: 空闲时间(包括IO等待时间)
    wa: 等待IO时间

iostat 查看IO负载

[www@cloud-test-env79 ~]$ iostat 1 1
Linux 3.10.0-957.21.3.el7.x86_64 (cloud-test-env79)     02/24/2020      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          79.06    0.00   14.45    0.04    0.00    6.46

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.29        24.13         4.30     255262      45469
sdb              22.42       216.43       362.11    2289445    3830471
dm-0              0.87        21.18         1.65     224015      17504
dm-1              0.74         0.58         2.45       6156      25904

avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值

  • %user: 在用户级别运行所使用的CPU的百分比.
  • %nice: nice操作所使用的CPU的百分比.
  • %sys: 在系统级别(kernel)运行所使用CPU的百分比.
  • %iowait: CPU等待硬件I/O时,所占用CPU百分比.
  • %idle: CPU空闲时间的百分比.

Device段:各磁盘设备的IO统计信息

  • tps: 每秒钟发送到的I/O请求数.
  • Blk_read /s: 每秒读取的block数.
  • Blk_wrtn/s: 每秒写入的block数.
  • Blk_read: 读入的block总数.
  • Blk_wrtn: 写入的block总数.

sar 找出系统瓶颈的利器

查看CPU使用率 sar -u


02:13:57 PM       LINUX RESTART

02:20:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
02:30:01 PM     all     38.17      0.00      6.64      0.02      0.00     55.17
02:40:02 PM     all     84.96      0.00     15.01      0.00      0.00      0.03
02:50:01 PM     all     84.93      0.00     15.03      0.00      0.00      0.04
03:00:01 PM     all     84.69      0.00     15.27      0.00      0.00      0.04
03:10:01 PM     all     84.62      0.00     15.35      0.00      0.00      0.04
03:20:01 PM     all     83.92      0.00     16.05      0.00      0.00      0.03
03:30:01 PM     all     84.98      0.00     14.98      0.00      0.00      0.04
03:40:02 PM     all     84.88      0.00     15.07      0.00      0.00      0.05
03:50:01 PM     all     84.63      0.00     15.34      0.00      0.00      0.03
04:00:02 PM     all     84.86      0.00     15.09      0.00      0.00      0.04
04:10:02 PM     all     84.56      0.00     15.41      0.00      0.00      0.04
04:20:01 PM     all     83.73      0.00     16.24      0.00      0.00      0.03
04:30:02 PM     all     83.97      0.00     15.99      0.00      0.00      0.04
04:40:01 PM     all     83.84      0.00     16.13      0.00      0.00      0.03
04:50:02 PM     all     84.77      0.00     15.22      0.00      0.00      0.01
Average:        all     81.44      0.00     14.86      0.00      0.00      3.71

可以看到这台机器使用了虚拟化技术,有相应的时间消耗; 各列的指标分别是:

  • %user 用户模式下消耗的CPU时间的比例;
  • %nice 通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例
  • %system 系统模式下消耗的CPU时间的比例;
  • %iowait CPU等待磁盘I/O导致空闲状态消耗的时间比例;
  • %steal 利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例;
  • %idle CPU空闲时间比例;

查看平均负载(sar -q)

指定-q后,就能查看运行队列中的进程数、系统上的进程大小、平均负载等;与其它命令相比,它能查看各项指标随时间变化的情况;

  • runq-sz:运行队列的长度(等待运行的进程数)
  • plist-sz:进程列表中进程(processes)和线程(threads)的数量
  • ldavg-1:最后1分钟的系统平均负载 ldavg-5:过去5分钟的系统平均负载
  • ldavg-15:过去15分钟的系统平均负载
02:13:57 PM       LINUX RESTART

02:20:01 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
02:30:01 PM        23       215     18.70     10.79      4.67         0
02:40:02 PM        15       204     18.32     17.53     11.33         0
02:50:01 PM        17       202     17.31     17.35     14.18         0
03:00:01 PM         5       202     17.28     17.45     15.75         0
03:10:01 PM        15       201     16.86     17.47     16.60         0
03:20:01 PM        18       201     17.40     17.73     17.32         0
03:30:01 PM        17       202     17.98     17.60     17.43         0
03:40:02 PM        18       199     16.85     17.40     17.45         0
03:50:01 PM        19       205     18.94     18.30     17.80         0
04:00:02 PM        18       204     17.58     17.65     17.68         0
04:10:02 PM        19       208     18.68     18.29     18.00         1
04:20:01 PM        19       200     17.22     18.03     18.09         0
04:30:02 PM        21       211     18.28     17.87     17.96         0
04:40:01 PM        16       205     17.54     18.13     18.17         0
04:50:02 PM        17       202     17.72     17.79     18.01         0
Average:           17       204     17.78     17.29     16.03         0

查看内存使用状况(sar -r)

字段注解:

  • kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
  • kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
  • %memused:物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比.
  • kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
  • kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
  • %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
02:13:57 PM       LINUX RESTART

02:20:01 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
02:30:01 PM    449916   3430448     88.41       948    925236   3204692     53.61   1564160    727752     74388
02:40:02 PM    250496   3629868     93.54        76    642292   3434756     57.46   1918776    577624      2896
02:50:01 PM    217472   3662892     94.40        76    646180   3468536     58.03   1874572    655268      1220
03:00:01 PM    200560   3679804     94.83        76    645484   3483892     58.28   1869832    677108      1400
03:10:01 PM    232804   3647560     94.00        36    687240   3407608     57.01   1824896    690028      1812
03:20:01 PM    237268   3643096     93.89         0    658572   3502412     58.59   1764740    801092      2316
03:30:01 PM    285796   3594568     92.63         0    674780   3493840     58.45   1752620    832220      2832
03:40:02 PM    297988   3582376     92.32         0    744884   3409472     57.04   1748868    820916      1592
03:50:01 PM    193656   3686708     95.01         0    929264   3597268     60.18   1823876   1070348      3652
04:00:02 PM    168556   3711808     95.66         0    944632   3562620     59.60   1847804   1070788       856
04:10:02 PM    170684   3709680     95.60         0    964628   3529120     59.04   1829056   1059360      2620
04:20:01 PM    251432   3628932     93.52         0    911876   3475648     58.15   1772392   1034332      2792
04:30:02 PM    276664   3603700     92.87         0    929752   3433156     57.43   1746496   1030228      3652
04:40:01 PM    353412   3526952     90.89         0    848160   3414616     57.12   1687536    993700       944
04:50:02 PM    244372   3635992     93.70         0    914408   3458112     57.85   1802704    986708       620
Average:       255405   3624959     93.42        81    804493   3458383     57.86   1788555    868498      6906

查看页面交换发生状况(sar -W)

页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用这个命令来确认是否发生了大量的交换;

  • pswpin/s:每秒系统换入的交换页面(swap page)数量
  • pswpout/s:每秒系统换出的交换页面(swap page)数量
02:13:57 PM       LINUX RESTART

02:20:01 PM  pswpin/s pswpout/s
02:30:01 PM      0.00      0.00
02:40:02 PM      0.00      0.03
02:50:01 PM      0.04      0.65
03:00:01 PM      0.08      0.83
03:10:01 PM      0.09      0.20
03:20:01 PM      0.25      0.45
03:30:01 PM      0.12      0.39
03:40:02 PM      0.07      0.00
03:50:01 PM      0.24      0.84
04:00:02 PM      0.04      0.30
04:10:02 PM      0.16      0.74
04:20:01 PM      0.31      1.20
04:30:02 PM      0.08      0.84
04:40:01 PM      0.33      2.06
04:50:02 PM      0.07      0.00
Average:         0.13      0.57

要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来;

  • 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
  • 怀疑内存存在瓶颈,可用sar -B、sar -r 和 sar -W 等来查看
  • 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看

JY