不确定从哪里开始,但是我在我的 Ubuntu Hardy 上不断看到这个奇怪的问题。
系统是 Core i7-920,配有 RAID10 磁盘和 3GB RAM,不过这可能不是重点。它上面有多个 Samba 共享。每次有人将大型文件(多个 GB)上传到共享时,系统响应能力就会显著下降(很明显)。
文件系统:ReiserFS (v3)
vmstat 和 top 均显示 I/O 等待时间不长,阻塞进程很少(例如 4 核系统中只有 2 个),偶尔会将 ~13000 个块写入磁盘。平均负载始终低于 0.5(再次说明,系统为四核且启用了 HT,因此有 8 个逻辑核心)。
但是,即使我移动鼠标光标,它也严重滞后......
以下是大量网络 I/O 传入期间的典型 vmstat 输出:
vmstat -n 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 419268 93724 48052 2071148 0 0 9 3 11 4 1 1 95 2
1 0 419268 91560 48052 2073292 0 0 0 0 2396 5716 5 1 94 0
0 0 419268 89636 48056 2075164 0 0 0 0 2173 5537 2 1 97 0
2 0 419268 87836 48056 2077136 0 0 0 0 2057 5216 1 1 98 0
1 0 419268 85716 48060 2078812 0 0 0 10104 2108 5261 2 1 97 0
0 0 419268 91940 48060 2071748 0 0 0 0 2221 6153 2 1 97 0
2 0 419268 90368 48064 2073640 0 0 0 0 2104 5384 1 1 98 0
0 0 419268 89000 48064 2075092 0 0 0 0 1781 4700 1 1 98 0
1 0 419268 87140 48064 2076640 0 0 0 0 2045 5104 1 1 98 0
1 1 419268 85584 48068 2078240 0 0 0 10112 1945 4343 2 1 91 7
0 0 419268 92668 48068 2071764 0 0 0 16 2064 5197 2 1 96 1
答案1
您可以尝试使用 IO 调度程序。默认的 IO 调度程序是 CFQ,它对于台式机来说效果很好,但根据我的经验,对于文件服务器来说 Deadline 效果更好。您可以随时更改 IO 调度程序,以便轻松进行试验,看看哪种调度程序最适合您的情况。
要列出可用的 io 调度程序,请使用此命令。
cat /sys/block/sdb/queue/scheduler
这应该返回noop anticipatory deadline [cfq]
要将您的调度程序更改为截止时间,请在相应的设备上使用以下命令。
sudo echo "deadline" > /sys/block/sdb/queue/scheduler
答案2
尝试运行iotop
- 它应该会向你显示一些东西。
答案3
正常运行期间,您是否看到过那么多中断(System - in)和上下文切换(System - cs)?我很奇怪,因为您描述甚至鼠标光标都变慢了。如果存在导致系统在负载下被中断淹没的问题,这将导致一切都变慢。
只是为了进行全面的猜测,/var/log/dmesg 中是否有关于磁盘或 raid 设备的错误或超时的信息?
编辑1:
我今天早上偶然看到一篇文章,它听起来确实像您在机器上看到的问题。Greg Smith 分析了一台似乎长时间冻结磁盘写入的服务器。他特别的调查方法是运行以下命令:
while [ 1 ]; do cat /proc/meminfo; sleep 1; done
并在系统似乎挂起之前和期间查看“Writeback:”缓存大小。如果写回缓存确实已填满(大约已满 40% 以上)并导致系统在刷新时暂停写入,那么 Greg 建议进行一些操作系统调整,以缓解此问题。Greg 的博客文章可以在以下网址找到:http://notemagnet.blogspot.com/2008/08/linux-write-cache-mystery.html
答案4
我想说的是,ReiserFS 只有一个锁,因此并不适合大型(多磁盘)磁盘阵列。但时间已经过去很久了,所以我可能是错的。
我认为改变调度程序会有很大帮助。