iostat 显示利用率为 100% - 怎样才能提高性能?

iostat 显示利用率为 100% - 怎样才能提高性能?

我有一台装有 CentOS 的专用网络服务器。

最近我的服务器负载很高,可能是由于 IO 瓶颈造成的。iostat -mx 3 显示:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          12.15    0.00   19.97   67.89    0.00    0.00

Device:         rrqm/s   wrqm/s   r/s   w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda              15.33     6.67 32.67  0.67     2.58     0.03   160.00     0.27    8.20   7.03  23.43
sda1             15.33     6.67 32.67  0.67     2.58     0.03   160.00     0.27    8.20   7.03  23.43
sdb             134.67     0.00 145.33 10.67    13.34     0.19   177.59   131.25  963.31   6.41 100.03
sdb1            134.67     0.00 145.33 10.67    13.34     0.19   177.59   131.25  963.31   6.41 100.03
sdc               0.00    17.33  0.33 21.00     0.00     0.15    14.50     0.08    3.84   0.31   0.67
sdc1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc2              0.00    14.33  0.33  9.33     0.00     0.09    19.86     0.04    4.28   0.48   0.47
sdc3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc4              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc5              0.00     0.67  0.00  4.33     0.00     0.02     9.23     0.02    4.85   0.46   0.20
sdc6              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc7              0.00     2.33  0.00  7.33     0.00     0.04    10.55     0.02    2.68   0.18   0.13
sdc8              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

怎样才能提高性能?我的 Web 服务器从该 HD 驱动器读取大量大文件。HDD sata2 的 13MB/s 是合理的值吗?我希望它更高。

顶部输出(仅限头部):

Cpu(s):  7.5%us,  5.5%sy,  0.0%ni,  4.1%id, 71.5%wa,  3.0%hi,  8.5%si,  0.0%st
Mem:   2048144k total,  2036732k used,    11412k free,    23732k buffers
Swap:  8385888k total,      192k used,  8385696k free,  1375064k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15369 apache    15   0  116m 9.8m 3564 S  3.3  0.5   0:01.37 httpd
23491 apache    15   0  117m  10m 3644 S  3.3  0.5   0:00.55 httpd
21694 mysql     25   0  308m  49m 4752 S  3.0  2.5   1068:49 mysqld
25735 apache    15   0  117m  10m 3660 S  2.7  0.5   0:00.53 httpd
25909 apache    15   0  116m 9964 3548 S  1.0  0.5   0:00.15 httpd
14814 apache    15   0  117m  10m 3684 S  0.7  0.5   0:00.53 httpd
15708 apache    15   0  117m 9.9m 3564 S  0.7  0.5   0:00.66 httpd
21464 apache    15   0  117m  10m 3664 S  0.7  0.5   0:01.32 httpd
22997 apache    15   0  116m 9.8m 3656 R  0.7  0.5   0:04.16 httpd
23484 apache    15   0  117m  10m 3668 S  0.7  0.5   0:00.28 httpd

谢谢

答案1

iostat 基本上显示的是你的磁盘饱和每秒输入/输出次数

man iostat

• rrqm/s — 每秒合并到设备的排队读取请求数。

• r/s — 设备每秒完成的读取请求数(合并后)。

HDD IOPS 性能参考数据, 维基百科

比较数字。

答案2

我知道这是一个很老的话题,但我面临着类似的问题

Device:         rrqm/s   wrqm/s   r/s   w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util

sdb             134.67     0.00 145.33 10.67    13.34     0.19   177.59   131.25  963.31   6.41 100.03

因此,在我的情况下,每当 avgqu-sz 达到 lun 队列深度(/sys/block/sdb/device/queue_depth)时,就会发生磁盘饱和,在我的情况下它设置为 128。我只需将其增加到 192,现在就可以获得更好的性能。我知道这不是一个更好的解决方案,但我目前无法更换磁盘,所以这是我唯一的解决方案。

答案3

我强烈建议您考虑用 SSD 或 SSD 支持的 RAID 阵列替换 sdb。

答案4

对于服务器或台式机级硬盘来说,13.34 MB/s 的速度相当慢,但吞吐量可能会受到大量随机访问的阻碍。如果此磁盘在硬件上显示为 RAID 1 或 RAID 5,那么这可能解释了吞吐量的部分损失

您可以在网络服务器离线时使用 bonnie++ 测试您的实际吞吐量。普通 SATA II 台式机驱动器应能达到 40-70MB/s 之间的速度。

您可以通过使用 RAID 0(糟糕的冗余)或理想情况下具有 > 4 个磁盘的 RAID 10 来实现良好的随机访问

更新:您还应该尽可能多地添加 RAM。内存数据显示,服务器已经在 RAM 中缓存了大量数据。

当您考虑可能需要购买多少设备时,您可能会发现 Amazon S3 和/或 EC2 的成本实际上更具成本效益。

相关内容