我正在管理一个拥有数千名用户的大型 LAMP 服务器。大约一周前,服务器速度变慢了,我唯一看到的是IO 延迟增加戏剧性地. 用户体验慢的页面加载后,当我想保存文件时,我经历了几秒钟的挂起。
操作系统是 CloudLinux,内核 2.6.32。此外,CageFS 和 cPanel 的完美结合。硬件是 IBM X3630 M3,有 11 个硬件 RAID 5 驱动器 + 一个备用驱动器。
我做了很多实验。首先,我运行iotop -oaP
以查看哪些进程占用了大量 IO 带宽。所有最终处于顶部位置的进程都是正常的 LAMP 服务。它们似乎并没有执行比它们应该执行的更多的 IO - 虽然我不知道服务器上的理想或正常压力。遗憾的是,我无法访问 IO 延迟正常时的 sysstat 信息,只能访问 munin 图表。另一方面,CageFs 应该限制所有用户的活动。
所以我开始想,磁盘的 IOPS 太多了,它们无法处理。专有megacli
实用程序表示 RAID 阵列没有故障,没有正在进行重建或任何异常。运行sar
数小时后,我遇到了超过 5000 的 IOPS,但当系统 IOPS 低于 1K 时,挂起仍然存在,所以我猜磁盘没问题?
我尝试过审计框架和系统水龙头,但都没有用(前者挂起了整个系统,我无法获得太多统计数据,后者甚至根本不起作用)。
我现在正在做的是通过几次测试将我的小型笔记本电脑与服务器的速度进行比较。我就是这样发现的,虽然我可以在 3-5 秒内使用以下脚本在我的笔记本电脑(带有小型、滞后的硬盘)上创建 100K 文件,但服务器需要 20-30 秒以上才能完成。
#!/bin/bash
i=1
while (( $i < $1 )); do
echo $i
echo "foobartest" > tmp/iotest.$i
(( i++ ))
done
这可能是因为服务器每秒处理 50-100 个 HTTP 请求,但奇怪的是,如果我观察终端中的运行数字,有时它会挂起几秒钟,然后才可以创建下一个文件。
我目前正在做的事情是使用strace -T
和解析输出以查看每个系统调用挂起的时间(因为我不能使用stap
)。
我发现 open、write 和 dup2 比其他操作花费的时间要多得多。考虑到我要创建大量包含内容的文件,这三个操作都正常 - 所以我真的不知道该往哪方面发展?!
strace 统计数据:
open 26,8320000000
write 11,5165000000
dup2 7,0665500000
注意:根据要求,我可以上传命令的输出,例如sar
等。抱歉我的英语不好,现在是凌晨 2 点,没有人真正关心他/她的网站。提前谢谢您。
更新:我们将电源从双 ~400W 改为双 ~650W,我不再遇到延迟问题。但是,延迟仍然很高,令人担忧。
输出megacli showsummary a0
显示 BBU 存在问题:
Hardware
Controller
ProductName : ServeRAID M5015 SAS/SATA Controller(Bus 0, Dev 0)
SAS Address : xxxx
FW Package Version: 12.12.0-0047
Status : Need Attention
BBU
BBU Type : iBBU
Status : Replace Battery pack
答案1
奇怪的是,如果我观察终端中的运行数字,有时它会挂起几秒钟,然后才可以创建下一个文件。
这听起来像是您正在填满 RAID 控制器上的写入缓存。您确实有一个写入缓存,对吗?(megacli showsummary a0)
尤其要检查您的 BBU 是否仍处于最佳状态。在默认配置中,故障/正在发生故障的 BBU 与没有写入缓存相同。
观察 iostat,查看当速度变慢时硬盘繁忙百分比是否会上升到接近 100%。
更多信息(例如底层文件系统)也会有所帮助。发布图表!您拥有的一切!(好吧,大部分)