我的物理服务器随机挂起,在此期间我没有收到任何日志条目。因此我运行了一个脚本:
while true; do date >>/tmp/dates; sleep 1; done & disown
几分钟后,文件 /tmp/dates 出现“漏洞”。有时日期会中断 30 秒,有时会连续中断 3 分钟:
Thu Feb 13 14:54:39 CET 2014
Thu Feb 13 14:54:40 CET 2014
Thu Feb 13 14:57:45 CET 2014
Thu Feb 13 14:57:46 CET 2014
服务器没有显示高负载或内存利用率。/var/log/messages 没有显示服务器挂起时的任何内容。但是它确实有一些关于 IO 问题的消息,例如光纤通道链路正在休息。我从 SAN 启动,因此 / 位于多映射器设备上。如果我调用
while true; do date >>/tmp/dates; sleep 1; done & disown
while true; do date >>/dev/shm/dates; sleep 1; done & disown
/dev/shm/dates 中不会有漏洞,但 /tmp/dates 中会有漏洞,所以我认为这不是内核挂起的情况,而是 IO 挂起的情况。
我在 top 中看不到处于不可中断睡眠状态的进程。硬件或存储日志中没有相关条目。
但是 iostat 显示 await 的延迟峰值很高:
03/28/14 12:32:00
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
dm-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 214.00 0.00 0.00 100.00
03/28/14 12:32:01
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
dm-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 214.00 0.00 0.00 100.00
03/28/14 12:32:02
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
dm-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 214.00 0.00 0.00 100.00
03/28/14 12:32:03
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
dm-4 0.00 0.00 0.00 1219.00 0.00 4.76 8.00 45.61 5251.48 0.82 100.40
03/28/14 12:32:04
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
dm-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.99 0.00 0.00 99.60
03/28/14 12:32:05
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
dm-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.01 0.00 0.00 100.40
03/28/14 12:32:06
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
dm-4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.00 0.00 0.00 100.00
内核是否正在等待来自存储的 IO,并且在块到达之前不执行任何操作?还能是什么?我如何才能找到答案?
答案1
查看 FC 交换机的错误日志,我们发现一个端口的错误日志非常大。我们禁用了这个端口,但整个周末都没有看到错误。所以我认为这个错误是由光纤通道路径损坏引起的。通常,据我所知,这样的错误应该被检测到(例如通过 multipathd),记录并自动更正。所以我假设我们这里遇到了一个未检测到的光纤通道路径故障的情况。