如何确保 I/O 请求已恢复正常速率?

如何确保 I/O 请求已恢复正常速率?

亚马逊网络服务我正在使用t2.small EC2实例作为 VPS 为 LAMP(PHP)堆栈上的几个网站提供服务。我刚刚收到了一张账单,几乎是我平常账单的三倍。我发现我的I/O 请求使用率极高。我登录服务器后发现磁盘已满。我删除了一堆非关键文件和日志,磁盘 (EBS) 现在的容量不到 60%,但我想检查两件事。

  1. 如何判断 I/O 请求数量过多是否是由于磁盘已满造成的?
  2. 我如何知道我是否仍在执行 I/O 请求?

我没有 AWS 特定的云监控监控服务已启用,所以我可能不会得到#1 的答案,但任何建议都会受到赞赏。

关于#2,我使用了这篇博文确定我的 I/O 速率,看起来非常非常高。以下是来自服务器的一些统计数据:

$ iostat
Linux 3.13.0-45-generic (dysphoria)     2015-10-08      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.74    0.01    0.69   16.83    0.43   79.30

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
xvda            170.08     10039.29        32.52  843300857    2731428
xvdf              0.01         0.02         0.00       1308          0

$ cat /proc/diskstats
   1       0 ram0 0 0 0 0 0 0 0 0 0 0 0
   1       1 ram1 0 0 0 0 0 0 0 0 0 0 0
   1       2 ram2 0 0 0 0 0 0 0 0 0 0 0
   1       3 ram3 0 0 0 0 0 0 0 0 0 0 0
   1       4 ram4 0 0 0 0 0 0 0 0 0 0 0
   1       5 ram5 0 0 0 0 0 0 0 0 0 0 0
   1       6 ram6 0 0 0 0 0 0 0 0 0 0 0
   1       7 ram7 0 0 0 0 0 0 0 0 0 0 0
   1       8 ram8 0 0 0 0 0 0 0 0 0 0 0
   1       9 ram9 0 0 0 0 0 0 0 0 0 0 0
   1      10 ram10 0 0 0 0 0 0 0 0 0 0 0
   1      11 ram11 0 0 0 0 0 0 0 0 0 0 0
   1      12 ram12 0 0 0 0 0 0 0 0 0 0 0
   1      13 ram13 0 0 0 0 0 0 0 0 0 0 0
   1      14 ram14 0 0 0 0 0 0 0 0 0 0 0
   1      15 ram15 0 0 0 0 0 0 0 0 0 0 0
   7       0 loop0 0 0 0 0 0 0 0 0 0 0 0
   7       1 loop1 0 0 0 0 0 0 0 0 0 0 0
   7       2 loop2 0 0 0 0 0 0 0 0 0 0 0
   7       3 loop3 0 0 0 0 0 0 0 0 0 0 0
   7       4 loop4 0 0 0 0 0 0 0 0 0 0 0
   7       5 loop5 0 0 0 0 0 0 0 0 0 0 0
   7       6 loop6 0 0 0 0 0 0 0 0 0 0 0
   7       7 loop7 0 0 0 0 0 0 0 0 0 0 0
 202       0 xvda 14198708 1225 1686588426 26715600 87579 51756 5461696 11290600 0 16654328 38003076
 202       1 xvda1 14198527 1203 1686586802 26715376 87579 51756 5461696 11290600 0 16654236 38002848
 202      80 xvdf 447 6 2616 288 0 0 0 0 0 288 288

$ free -m
             total       used       free     shared    buffers     cached
Mem:          2000       1910         89          6          6       1216
-/+ buffers/cache:        688       1312
Swap:            0          0          0

尽管上述信息是在启动后不久获取的,但iostat报告显示,即使系统运行了几个小时,初始 TPS 也处于 50-80 范围内。该服务器为大约 20 个网站提供服务,其中只有三个网站每天的点击量超过几次。这些网站每天的访问量约为几百人次。服务器和网站多年来一直保持这种配置,没有出现问题。直到最近,I/O 才开始激增,而代码、服务器配置或网站负载并没有相应的变化。

请注意,这个问题最初是在亚马逊网络服务官方论坛但似乎没人能帮忙。也许这个问题对于该论坛来说太笼统了。

答案1

iostat 手册页中有一些重要信息,如果不理解,可能会导致对所呈现的数据的误解。

iostat 命令生成的第一个报告提供了自系统启动以来的统计信息。每个后续报告涵盖自上一个报告以来的时间。每次运行 iostat 命令时都会报告所有统计信息。

因此,上面的简单 iostat 报告的是自系统启动以来收集的值。

更常见的做法是间隔一段时间运行 iostst 并丢弃第一组统计数据,例如

iostat 5

这将每 5 秒报告一次相关统计数据。

一旦收集了正确的数据,您将能够更好地了解情况。


看看在顶上命令。特别是以特权运行它并选择d将启用每个线程的磁盘 io 统计。

相关内容