如何修复 Linux 桌面上非常高的 w_await?

如何修复 Linux 桌面上非常高的 w_await?

过去几周,我的 Linux(Debian sid)桌面开始变得迟缓。经过调查,我发现:

  1. 不存在内存短缺问题——系统通常只使用 4G 内存的一半,即使算上缓存和缓冲区,也有超过 1G 的可用空间;
  2. 这种迟缓与文件访问有关;例如,打开 KMail 中的文件夹会导致轻微冻结;
  3. 当它变得缓慢时,CPU 会在 iowait 上花费大量时间。

当我进一步挖掘时,我发现了类似这样的事情:

$ iostat -x -d /dev/sda
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.05     7.90    3.14    2.41    23.27    40.94    23.11    12.02 2163.14   57.59 4906.16  31.58  17.55

如果我理解正确的话,w_await 的值(几乎 5000)非常高,因此 await 的值(r_await 和 w_await?的平均值)也非常高,否则一切正常。

当我在速度极慢的时候查看 iotop 时,我通常会看到全零,而 kjournald、flush 以及有时我期望的进程(例如 KMail)的 iowait 会闪烁 99.9%。

该系统多年来一直被用作“滚动发行版”,所有文件系统都是 ext3。

哦,当然:虽然定义了交换(在此磁盘上,这是系统中唯一持续安装的磁盘),但它几乎从未使用过(正如我所说,4G 还远没有耗尽)。

我在 dmesg 中看到的唯一错误是进程被阻塞(在问题最严重的时候——在重启后的最初几分钟内)超过 120 秒的呼救声。主要是 syslog。似乎没有其他迹象表明磁盘故障(smartctl 说一切一直都很好,除了很久以前磁盘气流加热时出现的情况)。

我正在使用 Linux 3.2;我尝试恢复到 2.6.38,但无济于事。

是磁盘问题吗?文件系统出问题了吗?我还能检查什么?

答案1

就你的情况而言,你说更换硬盘就解决了问题。这很好。但是,根据我的经验,尽管最近我只在笔记本电脑上看到过这种情况,但这通常是主板级 SATA 硬件问题,就笔记本电脑而言,我从来没有能够修复它。更换驱动器没有效果,而且由于我只在笔记本电脑上看到过类似的症状,我只能建议你尝试更换驱动器,如果这不起作用,那么可能是主板的问题。

顺便说一句,我重新安装了操作系统几次,并认为我已经解决了这些问题(这些问题在 Windows 和我使用过的每个 Linux 版本中都会发生),但是经过一段时间的频繁使用后,它们似乎又出现了,这让我认为是硬件/芯片组故障导致的热组件问题。

(这一切都假设您不仅仅是切换内核,因此内核驱动程序中存在一些故障,但是当您尝试了各种内核级别时,这显然与我最近遇到的问题相对应。)

答案2

不管怎样,对于任何发现这一点的人来说,我都想做总结。

底线:确实是磁盘出了问题。我更换了磁盘,一切似乎都恢复正常了。

在路上,我发现了两张有趣(而且便宜)的支票:

1) 为了确保问题不在我的操作系统设置中,我尝试从实时 CD 生成一些磁盘活动。正如所怀疑的那样,I/O 非常糟糕。

2) 为了确保问题不仅仅出在文件系统上,我使用了磁盘上的一些可用空间并尝试创建一个新的文件系统。这个过程非常慢,而且,在它结束后,操作系统甚至无法从磁盘读取“halt”可执行文件。

第三个测试确实是 Warren 建议的更昂贵的测试——更换磁盘。新磁盘似乎没有问题。

相关内容