我们的一些应用程序所有者表示,几个进程的运行时间是正常运行时间的两倍。
这个问题让我们很困惑。
我们无法理解为什么某些操作在服务器 1 上花费的时间是在服务器 2 上花费的时间的两倍。
服务器 1:IBM x3850 M2(RHEL 4 Nahant Update 8)
从 IO 角度来看,服务器 1 大部分时间处于空闲状态。S1 和 S2 均位于 Raid 5 中的 SAS 驱动器上。服务器 1 有 4 个驱动器,服务器 2 有 4 个驱动器。来自服务器 1 的 iostat 输出
Linux [主机名已移除] 2.6.9-89.ELsmp #1 SMP 2009 年 4 月 20 日星期一 10:34:33 EDT i686 i686 i386 GNU/Linux
服务器 2:IBM x3650(RHEL 4 Nahant Update 8)
服务器 2 是两台服务器中较为活跃的。iostat 输出显示由于 SAN 多路径,连接了大量设备。dd 操作和 tar 操作均在本地存储上完成。服务器 2 的 iostat 输出
Linux [主机名已移除] 2.6.9-78.0.13.ELsmp #1 SMP 2009 年 1 月 7 日星期三 17:52:47 EST i686 i686 i386 GNU/Linux
正如预期的那样,在服务器 1 上写入 1GB 文件的操作更快
[server1]$ time dd if=/dev/zero of=bigfile bs=1024 count=1048576
1048576+0 records in
1048576+0 records out
real 0m15.032s
user 0m0.961s
sys 0m11.389s
与服务器 2 相比,情况似乎如下:
[server2]$ time dd if=/dev/zero of=bigfile bs=1024 count=1048576
1048576+0 records in
1048576+0 records out
real 0m27.519s
user 0m0.531s
sys 0m8.612s
但是,在服务器 1 上对同一文件进行 tarball 压缩时,‘用户’时间会花费其两倍的时间,而实际时间则会更长一些。
[server1]$ time tar -czf server1.tgz bigfile
real 0m27.696s
user 0m20.977s
sys 0m5.294s
[server2]$ time tar -czf server2.tgz bigfile
real 0m23.300s
user 0m10.378s
sys 0m3.603s
答案1
海量 I/O 操作性能更多地取决于 HDD 速度和当前 I/O 负载,而不是 CPU。
答案2
这些问题正是 collectl 等工具最适合解决的。计算 dd 或 tar 运行所需的时间是一个好的开始,但中间发生了什么?您的 i/o 速率是否稳定,还是会达到谷底或停滞状态?从开始到结束,各种事情都可能出错。
由于您的系统具有已知的“良好”性能配置文件,因此您最适合实际解决此问题。使用 collectl 运行测试并观察您的 CPU、内存、网络和磁盘(所有这些都在同一行上,因此很容易看到随时间变化的趋势)。您还可以查看 nfs、tcp、套接字和其他一些东西,但我怀疑这不适用于这种情况。
现在在已知性能不佳的机器上重复测试,看看有什么不同。答案就在那里。可能是内存不足,CPU 中断太多(collectl 也可以显示这一点),或者 I/O 等待时间很长。无论它是什么,collectl 都可以帮你识别,但你必须找出根本原因。可能是碎片太多,甚至是坏磁盘。也许控制器出了问题。这部分需要你来解决。
希望这可以帮助...
-标记