就我所读到的关于 iowait 的内容而言,它对我来说仍然是个谜。
我知道这是 CPU 等待 IO 操作完成所花费的时间,但是究竟是什么样的 IO 操作呢?我也不确定,为什么它如此重要?CPU 不能在 IO 操作完成时做其他事情,然后再返回处理数据吗?
还有什么是正确的工具来诊断哪些进程确实在等待 IO。
以及有哪些方法可以最大限度地减少 IO 等待时间?
这是一个软件设计问题
我曾经按照以下速度规则工作
cache memory > memory > disk > network
Run Code Online (Sandbox Code Playgroud)
每一步都是前一步的 5-10 倍(例如,高速缓存比主存储器快 10 倍)。
现在,似乎千兆以太网的延迟比本地磁盘少。因此,也许读取大型远程内存数据库的操作比本地磁盘读取快。对于像我这样的老前辈来说,这感觉就像异端邪说。(我只是花了一些时间在磁盘上构建本地缓存以避免必须进行网络往返 - 因此我的问题)
有人在这方面有任何经验/数字/建议吗?
是的,我知道唯一真正的方法是构建和测量,但我想知道一般规则。
编辑:
这是来自顶级答案的有趣数据:
同一数据中心内的往返 500,000 ns
磁盘寻道 10,000,000 ns
这对我来说是一个冲击;我的心智模型是网络往返本质上是缓慢的。它不是 - 它比磁盘“往返”快 10 倍。
Jeff attwood 在http://blog.codinghorror.com/the-infinite-space-between-words/上发布了这个很好的博客
我在使用 Linux 系统时遇到问题,我发现sysstat并sar报告了磁盘 I/O、平均服务时间以及平均等待时间的巨大峰值。
下次发生这些峰值时,我如何确定哪个过程导致了这些峰值?
有可能sar吗?我可以从已经录制的sar文件中找到这些信息吗?
的输出sar -d,系统停顿发生在下午 12.58-13.01 左右。
12:40:01 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
12:40:01 dev8-0 11.57 0.11 710.08 61.36 0.01 0.97 0.37 0.43
12:45:01 dev8-0 13.36 0.00 972.93 72.82 0.01 1.00 0.32 0.43
12:50:01 dev8-0 13.55 0.03 616.56 45.49 0.01 0.70 0.35 0.47
12:55:01 dev8-0 13.99 0.08 917.00 65.55 0.01 0.86 0.37 0.52
13:01:02 dev8-0 6.28 0.00 400.53 63.81 0.89 141.87 141.12 88.59 …Run Code Online (Sandbox Code Playgroud) 我有一台负载非常高的服务器。就 CPU 使用率而言,我没有任何反应,也没有交换。
我认为这是因为某些进程正在等待磁盘 IO,我想看看在等待什么。
是否有任何程序可以显示哪些进程正在等待 IO?我知道,iotop但这显示了当前正在执行 IO 的操作。
或者这是一个愚蠢的问题?(如果是这样解释如何:))
我们对探索在服务器环境中使用 SSD 驱动器的可能性非常感兴趣。但是,我们需要确定的一件事是预期驱动器寿命。根据这篇文章,制造商以“写入的总字节数”(TBW)来报告驱动器的耐用性。例如,从那篇文章中可以看出,Crucial C400 SSD 的额定容量为 72TB TBW。Linux 生态系统下是否存在任何脚本/工具来帮助我们衡量 TBW?(然后对使用 SSD 驱动器的可行性做出更明智的决定)
您如何确定 Linux 服务器的性能受 I/O 限制,也许更重要的是,哪个或哪些进程导致了问题?
诸如 iftop/iptraf 之类的已知工具显示每个接口和每个连接的网络 I/O。有没有办法查看每个进程的网络 I/O 统计信息?
这是 AWS Linux AMI + EBS 上的标准 apache Web 服务器。我们注意到高平均负载 (+8) 并iotop -a显示:
Total DISK READ: 0.00 B/s | Total DISK WRITE: 2.37 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
3730 be/4 root 0.00 B 0.00 B 0.00 % 91.98 % [kworker/u8:1]
774 be/3 root 0.00 B 1636.00 K 0.00 % 15.77 % [jbd2/xvda1-8]
3215 be/4 apache 0.00 B 40.39 M 0.00 % 0.88 % httpd
3270 be/4 apache 0.00 B 38.20 M 0.00 …Run Code Online (Sandbox Code Playgroud) 我见过这个问题: 如何识别大量写入磁盘?
而且我之前使用过dstat和atop ……但它们似乎没有指出是什么进程导致了磁盘 I/O。例如,来自 dstat:
dstat -ta --top-bio
----system---- ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- ----most-expensive----
time |usr sys idl wai hiq siq| read writ| recv send| in out | int csw | block i/o process
14-12 16:16:25| 22 3 49 26 0 0|2324k 0 | 17k 6144B| 0 0 |1324 0 |
14-12 16:16:26| 24 3 30 43 0 0|4960k 8192B|1498B 4322B| 0 0 |1494 0 |wget 0 4096B
14-12 16:16:27| 25 4 38 33 0 …Run Code Online (Sandbox Code Playgroud) 是否可以在 Linux 中看到有多少来自用户空间的读写请求最终导致块设备的缓存命中和未命中?
io ×10
linux ×8
performance ×3
apache-2.2 ×1
cache ×1
iowait ×1
measurement ×1
networking ×1
ssd ×1
storage ×1
top ×1
tuning ×1