调试 IO 限制

调试 IO 限制

我有一个 Fedora 盒子,它有一些严重的 IO 限制,我不知道如何调试。

该服务器有一个 Areca Technology Corp. ARC-1130 12 端口 PCI-X 至 SATA RAID 控制器,带有 12 个 7200 RPM 1.5 TB 磁盘和一个 Marvell Technology Group Ltd. 88E8050 PCI-E ASF 千兆以太网控制器。

uname -a 输出:2.6.32.11-99.fc12.x86_64 #1 SMP 星期一 4 月 5 日 19:59:38 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux

该服务器是一个运行 Nginx 的文件服务器,启用了存根状态模块,因此我可以看到当前的连接数。当我有大量同时处于写入状态的连接时,问题就会出现。通常约为 350 个,此时此刻为 590 个,服务器几乎无法使用,速度停留在 230mbit/s。

如果我运行 stop 并按 1 来查看 CPU 核心使用情况,则所有 4 个核心的 io 等待率约为 99%,如果我运行 iotop,则 nginx 工作进程是唯一产生读取负载的进程,目前约为 25MB/s。我将每个工作进程绑定到各自的核心。

最初我以为只是磁盘出了问题。但我运行了 fscheck 和 smartmontools 检查,没有发现任何错误。我还运行了 iozone 测试,您可以在此处查看结果:http://www.pastie.org/951667.txt?key=fimcvljulnuqy2dcdxa

此外,当连接数较少时,我可以轻松获得良好的速度。如果我通过本地网络,它很容易达到 60MB/秒。

现在我刚刚尝试将一个文件放入 /dev/shm,然后我将一个文件从公共目录符号链接到它并通过本地网络使用 wget,但只得到了 50KB/s。

另外,如果我尝试 cp /dev/shm/test /root/test,它会快速复制大约 740MB,然后速度会大大减慢。iotop 再次报告 99% iowait。

我真的不知道如何找出问题所在。这可能是自然的磁盘限制,但 /dev/shm 中的文件应该传输,因此似乎存在网络限制,但如果连接不多,那就没问题了。也许是 TCP 堆栈问题,但我真的不知道如何检查。

任何有关如何进行调试的建议都非常受欢迎。如果需要更多信息,请告诉我,我会尽力获取。

谢谢。

答案1

iotop 可以很好地查看哪些进程正在创建 io,但我会使用 sar 来获取更具体的数字;例如,sar -d 10 6 将在一分钟内为您提供 10 秒的样本,从而为您提供有关磁盘性能的更多详细信息,以及您是否真的存在瓶颈(请记住,非常小的 await/svctime 会对性能产生重大影响 - 我见过只有 20ms 的 svctimes 就可以使数据库服务器可用,因为那是 20ms每眼压DB 正在尝试执行的操作)。

除此之外,设置 sar 的 sa1(在 /etc/cron.d/sysstat 中)以比每十分钟默认频率更频繁地收集数据,并在繁忙时段(sar -A -s 09:00:00 -e 10:00:00)收集完整的统计信息,也会为您提供有关网络性能的详细信息,并且可以轻松关联 CPU、磁盘、网络、内存行为以寻找可疑数字。

(是的,网络可以显示为 iowait)

相关内容