高平均负载、低 CPU 和内存使用率以及最短 IO 操作等待时间 (5%)

高平均负载、低 CPU 和内存使用率以及最短 IO 操作等待时间 (5%)

我有一个 VPS操作系统 centos 5.7,并且表现非常奇怪。我的 VPS 位于2芯机

对于一台 2 核的机器,我可以看到平均负载非常高,当我使用以下命令top进行调查时可以明显看出:

 - 04:04:40 up 1 day, 22:43,  1 user,  load average: 6.23, 5.19, 4.72
Tasks:  59 total,   1 running,  58 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.4%us,  3.4%sy,  0.0%ni, 85.4%id,  5.8%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1376256k total,   755908k used,   620348k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      15   0  2172  664  572 S  0.0  0.0   0:02.59 init
 1135 root      18  -4  2276  556  344 S  0.0  0.0   0:00.00 udevd
 1231 root      19   0 32716  564  460 S  0.0  0.0   0:00.00 brcm_iscsiuio
 1542 root      16   0  1828  580  488 S  0.0  0.0   0:03.24 syslogd
 1599 named     23   0 50596 3984 2024 S  0.0  0.3   0:01.26 named
 1615 root      18   0  7228 1044  644 S  0.0  0.1   0:00.00 sshd
 1626 root      15   0  2848  844  676 S  0.0  0.1   0:00.00 xinetd
 1638 root      18   0  3728 1316 1144 S  0.0  0.1   0:00.00 mysqld_safe
 1662 mysql     15   0  252m  99m 4876 S  0.0  7.4   9:21.01 mysqld
 1738 postgres  15   0 20348 3412 2900 S  0.0  0.2   0:00.26 postmaster
 1740 postgres  15   0 10128  904  388 S  0.0  0.1   0:01.42 postmaster
 1742 postgres  15   0 20348  984  468 S  0.0  0.1   0:05.20 postmaster
 1743 postgres  18   0 11128  812  292 S  0.0  0.1   0:00.13 postmaster
 1744 postgres  15   0 10308 1060  440 S  0.0  0.1   0:00.00 postmaster
 1757 mailnull  15   0  9524 2328 1836 S  0.0  0.2   0:00.99 exim
 1786 root      18   0  2172  720  552 S  0.0  0.1   0:02.58 dovecot
 1787 root      18   0  2648 1040  832 S  0.0  0.1   0:02.04 dovecot-auth

如你看到的,负载为 6(对于 2 核机器而言),但是当所有顶级进程加在一起时,内存和 CPU 消耗最小!

我以为这是一个 IO 等待问题,因此我曾经iostat -cx 30检查过:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.43    0.02    3.36    5.80    0.00   85.39

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.79    0.00    0.33    2.09    0.00   93.79

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.61    0.00    0.30    5.67    0.00   90.42

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.91    0.00    0.22    1.04    0.00   96.83


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.47    0.00    0.28    0.75    0.00   95.49


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.93    0.00    0.44    2.62    0.00   93.01

可以看到,%iowait只有5%,也就是说我的进程只用了5%的时间等待IO操作,所以说明磁盘不忙,不可能是进程在等待磁盘导致的负载过高吧?

最后,为了进一步证实我的观点,我输入vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 751928      0      0    0    0   120    99    0  105  5  3 85  6  0

可以看到,运行的进程数最少,b列为 0,表示运行的进程数UNINTERRUPTIBLE_SLEEP为 0。此外,bi列(从块设备读取的块)只有 120,不是很高吧?si列(从交换/磁盘读取的内存)为 0。最后,在 cpu 标题下,该wa列显示 CPU 仅花费 6% 的时间等待 IO 完成。

这些都排除了IO操作作为瓶颈的可能性。

因此,结论是,平均负载非常高,并且降低了我的网站的性能,但是,这种高平均负载不是由以下任何原因造成的:

  1. 我的进程的 CPU 或内存使用率过高
  2. IO操作。

什么原因会导致平均负载过高?

答案1

CPU 负载是准备运行的进程的平均数量。根据定义,等待 I/O 的进程不计入其中。

这些数字确实很奇怪,平均负载为 6 时,我预计 CPU 利用率会比 5 到 6% 高得多。但另一方面,负载正在下降,也许前段时间 CPU 出现过峰值?工作量有什么特别之处吗?

安装sysstat、学习如何使用它(请注意,它并不简单)并利用它来获得洞察力......

相关内容