就我所读到的关于 iowait 的内容而言,它对我来说仍然是个谜。
我知道这是 CPU 等待 IO 操作完成所花费的时间,但是究竟是什么样的 IO 操作呢?我也不确定,为什么它如此重要?CPU 不能在 IO 操作完成时做其他事情,然后再返回处理数据吗?
还有什么是正确的工具来诊断哪些进程确实在等待 IO。
以及有哪些方法可以最大限度地减少 IO 等待时间?
我们有一个基于 CentOS 6.4 的服务器连接到 Hitachi HNAS 3080 存储,并观察到内核以只读模式重新挂载文件系统:
5 月 16 日 07:31:03 GNS3-SRV-CMP-001 内核:[1259725.675814] EXT3-fs (dm-1):错误:以只读方式重新挂载文件系统
这发生在几次 I/O 错误并且据报道设备的所有路径都出现故障之后:
5 月 16 日 07:31:03 GNS3-SRV-CMP-001 多路径:mpatha:剩余活动路径:0
我一直在查看 sar 日志,可以看到很少有非常大的(2 秒)等待时间:
07:40:00 dev8-0 17.91 112.04 98.03 11.73 0.00 0.20 0.07 0.12
07:40:00 dev8-16 0.23 1.85 0.00 8.00 0.00 3.71 3.71 0.09
07:40:00 dev8-32 91.50 8338.76 5292.93 148.98 8.38 91.60 9.76 89.35
07:40:00 dev252-0 91.27 8336.91 5292.93 149.34 17.79 194.88 9.79 89.38
07:40:00 dev252-1 674.80 8168.16 5292.93 19.95 1473.53 2183.60 1.32 …Run Code Online (Sandbox Code Playgroud) 当 iowait 被认为是高的?
iostat -x
avg-cpu: %user %nice %system %iowait %steal %idle
2,89 0,01 5,45 49,83 0,00 41,83
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
fd0 0,00 0,00 0,00 0,00 0,00 0,00 8,00 0,00 40,00 40,00 0,00
sda 0,18 0,86 2,82 0,60 181,20 21,92 59,35 0,03 10,22 5,02 1,72
sdb 3,96 39,67 6,27 20,94 2243,04 564,37 103,16 0,24 8,83 6,57 17,89
sdc 69,17 0,02 77,40 21,92 37365,20 1578,42 392,10 1,53 15,44 7,46 74,14
sdd 0,64 …Run Code Online (Sandbox Code Playgroud) Windows 是否以与 Linux 相同的方式计算和报告“ iowait”?也就是说,进程进入“不间断睡眠”,他们花费的时间从“CPU空闲”中减去?
如果是这样,哪些 Perfmon 计数器适合检测“由于延迟服务 IO 而导致 CPU 繁忙”而不是“由于计算导致 CPU 繁忙”?
Debian 6 on HP proliant (2 CPU) with raid(2*1.5T RAID1 + 2*2T RAID1 加入 RAID0 使 3.5T)主要运行 nfs 和 imapd(加上用于 windows 共享的 samba 和用于预览网页的本地 www);本地 ubuntu 桌面客户端安装 $HOME,笔记本电脑通过 nfs/smb 访问 imap 和奇数文件(例如视频);通过家用路由器/交换机连接 100baseT 或 wifi 的盒子
uname -a
Linux prole 2.6.32-5-686 #1 SMP Wed Jan 11 12:29:30 UTC 2012 i686 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
安装程序已经工作了几个月,但很容易间歇性地变得很慢(从服务器安装 $HOME 的桌面用户体验,或笔记本电脑播放视频),现在一直很糟糕,我不得不深入研究它以试图找出问题所在(! )
服务器在低负载下似乎还可以,例如(笔记本电脑)客户端(在本地磁盘上带有 $HOME)连接到服务器的 imapd 和 nfs 挂载 RAID 以访问 1 个文件:顶部显示负载 ~ 0.1 或更少,0 等待
但是当(桌面)客户端挂载 $HOME 并启动用户 KDE 会话(所有访问服务器)时,top显示例如
top - 13:41:17 up …Run Code Online (Sandbox Code Playgroud) 我注意到在上周的周二晚上,平均负载急剧上升,并且由于流量小而看起来不正常。通常,这些数字通常平均约为 0.40 或更低,并且我的服务器内容(mysql、php 和 apache)已优化。我注意到 IOWait 异常高,即使进程几乎不使用任何 CPU。
top - 01:44:39 up 1 day, 21:13, 1 user, load average: 1.41, 1.09, 0.86
任务:总共 60 个,运行 1 个,睡眠 59 个,停止 0 个,僵尸 0 个
Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1:0.0%us、0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu2:0.0%us、0.3%sy、0.0%ni、99.7%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu3:0.0%us、0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu4:0.0%us、0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu5:0.0%us、0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu6:0.0%us、0.0%sy、0.0%ni、100.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu7:0.0%us、0.0%sy、0.0%ni、91.5%id、8.5%wa、0.0%hi、0.0%si、0.0%st
内存:总共 1048576k,已使用 331944k,716632k 空闲,0k 缓冲区
交换:总共 0k,已使用 0k,空闲 0k,缓存 0k
PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令
1 根 15 0 2468 1376 1140 S 0 … 我有一个服务器,它通过 NFS 导出主目录。它们位于软件 RAID1(/dev/sdb 和 /dev/sdc)上,操作系统位于 /dev/sda 上。我注意到我的%iowait报告top和sar相对较高(与其他服务器相比)。值范围在 5-10% 之间,至于其他服务器(比这台服务器负载更多)与 0-1% 相同。当%iowait达到 12% 以上时,所谓的用户体验就会下降。然后我们会经历延迟。
我在日志中没有任何驱动器错误。我想避免使用试错法来玩驱动器。
如何找出哪个设备(/dev/sda、/dev/sdb 或 /dev/sdc)是瓶颈?
谢谢!
编辑:我使用 Ubuntu 9.10 并且已经iostat安装。我对 NFS 相关问题不感兴趣,但更多的是如何找到使系统变慢的设备。NFS 没有加载,我有 32 个线程可用,结果是
grep th /proc/net/rpc/nfsd
th 32 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Run Code Online (Sandbox Code Playgroud)
Edit2:这是iostat -x 1输出的一部分(我希望我没有在这里违反一些规则):
avg-cpu: %user %nice %system %iowait %steal %idle
45.21 0.00 0.12 4.09 0.00 50.58
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz …Run Code Online (Sandbox Code Playgroud) 当我在服务器上看到它时,我理解 IO 等待,这意味着在我等待 IO 赶上时 CPU 被阻塞[source]。
我试图理解为什么 SAN 统计数据会显示高 IO 等待 - 这是否表明 SAN CPU 被 SAN 磁盘阻塞还是其他原因?
我有一个运行 Fedora 7 的系统已经有几年了(我知道,它也很旧)。现在我运行了 PS3 媒体服务器(以及其他一些东西,比如 Vmware 和 Plone),我注意到我在流式电影中遇到了意外中断。
通常,该系统以 25-30 MiB/秒的速度读取和写入。我发现(见下文)在某些时候一切都会停止 15-30 秒。我在这里查看了其他问题和答案,但我找不到任何可能出错的提示(软件方面)。我在这里所做的是打开一部电影并寻求稍后的观点。我的 PS3 使用媒体服务器获取每分钟的缩略图,以便我寻找所需的场景。
我在下面看到的是,这个简单的操作使整个系统陷入停顿。整个系统停止等待IO。此外,上下文切换的数量急剧下降到大约 650。我检查了系统是否正在交换或以其他方式报告日志文件中的任何错误或警告。我一直无法发现任何似乎相关的东西。
我使用 iotop 来获取更多信息,我刚刚发现所有正在执行少量 KiB/秒 IO 的正在运行的应用程序突然变为 99% IOWAIT,而不是它们正常运行的 0.01%。
目前我最好的猜测是硬件(硬盘)故障。
我对你们的问题:我如何找出真正的问题是什么?
系统信息:Intel Pentium D CPU 2.80GHz Linux 存储 2.6.22.1-27.fc7 #1 SMP Tue Jul 17 17:13:26 EDT 2007 i686 i686 i386 GNU/Linux
dstat -f 在我的系统上的输出示例。
-------cpu0-usage--------------cpu1-usage------ --dsk/sda-----dsk/sdb-----dsk/sdc-----dsk/sdd-- ---paging-- ---system-->
usr sys idl wai hiq siq:usr sys idl wai hiq siq| read writ: read writ: read writ: read writ| in out | int csw …Run Code Online (Sandbox Code Playgroud)