什么创buildCPU I / O等待,但没有磁盘操作?

我有CPU I / O等待稳定在50%左右,但是当我运行iostat 1它显示很less或没有磁盘活动。

什么原因导致等待没有iops?

注意:这里没有NFS或FUSE文件系统,但它使用Xen虚拟化。

在这里输入图像描述

NFS可以做到这一点,如果其他networking文件系统(甚至基于FUSE的设备)具有相似的效果,也不会感到意外。

服务器上的其他虚拟机是否有机会颠覆磁盘?

我知道虚拟化,如果主机节点过载,你可以得到一些奇怪的结果。

如果这是使用基于实例的存储的Amazon EC2 Xen环境,请让Amazon检查包含此映像的主机的运行状况。

如果这是一个可以访问虚拟机pipe理程序的Xen环境,那么从外部检查用于xvda和xvdb设备的磁盘映像(文件,networking,LVM-slice等)的IOwait。 一般而言,您还需要检查I / O系统,因为其他磁盘设备可能垄断了系统资源。

 iostat -txk 5 

通常是一个很好的启动诊断工具。 对于所有可用的设备,它需要5秒钟的I / O总结,因此在虚拟机映像的进入和终止都很有用。

检查可用的文件描述符/ inode。 当你达到极限,他们交换和模仿艾奥瓦

编辑

我看到你正在使用xen,看看你目前的中断,你可能会发现blkif比正常高。

现在已经晚了,但是安装了munin,它确实有助于未来的debugging。

 sudo sysctl vm.block_dump=1 

然后检查dmesg以查看正在执行块读取/写入或弄脏inode。

还要检查limits.conf中的nofile限制,一个进程可能会请求更多的文件,而不是允许打开。

警告:HDPARM是危险的,请仔细阅读你将要使用的命令!

如果没有其他虚拟机正在压缩硬盘,那么做

 hdparm -f 

在底层的物理磁盘上。 磁盘caching可能无法正确工作。 这将刷新存储在caching中的数据,并且可以不断监视I / O,在刷新后是否要重新升起。 如果是的话,这将是一个caching问题。

在平均负载的情况下,我看到阻塞的networking操作(即长时间调用外部数据库服务器)增加。 我不知道,但我猜测networkingIO可以导致CPU等待上升? 谁能确认?

可能是环回设备,它们本身通过networking进行安装。

在我的机器上,NFS是最大的IO-WAIT“生产者”。 我的笔记本电脑中有一个固态硬盘,所以“真正的IO”不是问题。 尽pipe如此,我有时候会因为挂载的nfs份额而等待很多IO等待。

SCP有时也似乎导致IO等待,但是远远不够。

这可以是任何事情。 这只是意味着有些事情正在等待I / O操作的结束。 你可以通过ps找出它是什么进程,然后将gdb附加到它并检查回溯,以确定哪个呼叫挂起(通常这是一些networking相关的东西或突然断开的磁盘)。 对于fd信息,请查看/ proc。

在RAID发生故障之前,我也经历过一个类似的问题,一些SATA弯曲的SATA电缆开始出现故障。

CPU使用率接近0%,但四核系统上的一个或多个CPU在IOwait上花费了100%的时间长时间(通过top多线cpu显示),IOps和带宽非常低通过iostatfind),但突发性高的中断活动。 在任何磁盘访问(即从某人的emacs会话自动保存)期间,交互式命令行使用都是痛苦的,但是一旦IOwait周期过去了(大概重试之后操作成功),就可以容忍这种情况了。