在EC2实例的Ubuntu 12.04中由于I / O等待而导致高负载

我正在使用Ubuntu服务器12.04,无法find负载的原因,我看到过去一周服务器响应时间的变化

在阅读Linux故障排除之后,第一部分:高负载

看起来好像CPU和RAM没有问题,这个负载可能与I / O绑定的负载有关 ,使用top命令我得到了下面的输出

加载和内存使用

这里是97.6%wa ,RAM是免费的,没有交换使用。

以下是命令iostat输出,播种89% iowait89% iowait

 ubuntu@ip-my-sys-ubuntu:~$ iostat Linux 3.2.0-58-virtual (ip-172-31-6-203) 02/19/2015 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 3.05 0.01 3.64 89.50 3.76 0.03 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn xvdap1 69.91 3.81 964.37 978925 247942876 

我也用iotop修复了间隔后显示99%的I / O,磁盘写我观察者为1266 KB/s

在这里输入图像描述

在这里输入图像描述

是不好? 随着响应时间的降低。 这是什么原因造成的?

EDITS是由别人问的

iftop O / P

  12.5kb 25.0kb 37.5kb 50.0kb 62.5kb └─────────────────┴──────────────────┴─────────────────┴──────────────────┴────────────────── ip-12-1-1-111.ap-southeast-1. => 115.231.218.130 0b 2.04kb 522b <= 0b 1.53kb 393b ip-112-1-1-111.ap-southeast-1. => 62.snat-111-91-22.hns.net.in 1.52kb 1.52kb 1.72kb <= 208b 208b 262b ip-112-1-1-111.ap-southeast-1. => static-mum-120.63.141.177.mtnl. 0b 480b 240b <= 0b 350b 175b ip-112-1-1-111.ap-southeast-1. => ip-112-11-1-1.ap-southeast-1.co 0b 118b 178b <= 0b 210b 292b ip-112-1-1-111.ap-southeast-1. => static-mum-120.63.194.119.mtnl. 0b 0b 240b <= 0b 0b 175b TX: cum: 123kB peak: 3.72kb rates: 1.67kb 2.02kb 1.78kb RX: 51.5kB 4.88kb 1.19kb 989b 918b TOTAL: 174kB 8.60kb 2.86kb 2.98kb 2.68kb 

输出 iostat -x -k 5 2

 ubuntu@ip-111-11-1-111:~$ iostat -x -k 5 2 Linux 3.2.0-58-virtual (ip-111-11-1-111) 03/04/2015 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 3.75 0.01 4.74 22.72 4.06 64.71 Device: rrqm/s wrqm/sr/sw/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util xvdap1 0.00 263.80 0.42 109.42 7.28 1572.36 28.76 1.92 17.52 17.57 17.52 2.31 25.39 avg-cpu: %user %nice %system %iowait %steal %idle 8.97 0.00 4.77 76.34 9.92 0.00 Device: rrqm/s wrqm/sr/sw/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util xvdap1 0.00 35.69 0.00 85.88 0.00 438.93 10.22 137.55 1612.71 0.00 1612.71 11.11 95.42 

@shodanshok点2

在这里输入图像描述

iotop -a

在这里输入图像描述

调整你的mysql服务,以避免接触到磁盘,并留意你的postfix队列,你可能会有很多电子邮件进入一个I / O敏感队列(即延期,小随机读取行为)。

您的电子邮件系统已被用作垃圾邮件发送者的中继。

看看后缀文档,并限制中继访问您的MTA。

在使用iostat和iotop收集更多信息之后进行编辑
您的磁盘100%的负载,因为它可用IOPS:按照iostat,你有一个恒定的50 + IOPS(85 W / S – 35合并W / S)。 EC2实例,特别是廉价的实例,在持续IOPS(范围在30-50 IOPS)方面有很大的上限。

按照新的iotop输出,mysql和反弹都在吃大量的IOPS。 但是,iotop的输出似乎并不完整,或者至less被严重sorting。 你可以重新运行“iotop -a”sorting一次由IOPS和另一次通过磁盘写入?

原始答案
我敢打赌:“反弹”进程正在发出许多同步写入,扼杀亚马逊提供的虚拟磁盘设备(顺便说一下,你使用什么样的configuration?EC2磁盘对持续与突发I / O有相当严格的规则)。

无论如何,确定什么是燃烧I / O带宽有时可能有点困难。 虽然iotop是一个非常好的工具,有时它不会给你所需的信息。 我们需要更深入。 所以,请按照以下build议:

  1. 首先,我们需要确定正在处理的I / Otypes以及受影响的块设备。
    请运行以下命令: iostat -x -k 5 2 。 请报告两个结果集。
  2. 然后,我们需要确定等待I / O的进程
    什么时候可以使用“top”:启动它,按shift + f(F),然后w,然后input,然后shift + r(R)。 第一个进程是D或D +状态(即:等待磁盘/networking)。 请报告清单。
  3. 使用iotop显示进程的累计I / O值
    运行iotop -a大约一分钟,然后粘贴输出。

有点晚了,但是我在类似的机器上遇到了同样的问题,发现问题是一堆损坏的MySQL表。 由于这些表中有一些有很多数据,所以产生了很多的I / O等待时间。

查看/var/log/mysql/error.log或使用mysqlcheck查找和修复损坏的数据。

如上所述,很有可能您的EC2实例带有IO上限,或者可能在Amazon EBS标准卷上支持,而这并不能提供非常好的IO。 看看这个页面 – 它描述了Amazon提供的不同的卷types。

即使你有这样慢的音量,你仍然可以写得相当快,但如果你的负载本质上是随机的,看起来可能是(SQL的东西),你可能想升级IOPS容量,因为这通常是SQL性能的上限。

所以 – 从你的数字来看,你可能会用完标准存储的IOPS。 购买更快的存储并不昂贵。 看看这个 。

磁盘可能处于非DMA模式。 请检查驱动器的DMA状态。 (hdparm命令)

如果不是这样,别的东西可能会产生大量的中断。 任何人都记得那些老DOS时代的东西?