我有一个 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操作作为瓶颈的可能性。
因此,结论是,平均负载非常高,并且降低了我的网站的性能,但是,这种高平均负载不是由以下任何原因造成的:
- 我的进程的 CPU 或内存使用率过高
- IO操作。
什么原因会导致平均负载过高?
答案1
CPU 负载是准备运行的进程的平均数量。根据定义,等待 I/O 的进程不计入其中。
这些数字确实很奇怪,平均负载为 6 时,我预计 CPU 利用率会比 5 到 6% 高得多。但另一方面,负载正在下降,也许前段时间 CPU 出现过峰值?工作量有什么特别之处吗?
安装sysstat
、学习如何使用它(请注意,它并不简单)并利用它来获得洞察力......