Linux 上 open() 系统调用缓慢

Linux 上 open() 系统调用缓慢

我们的 Samba 文件服务器在 Linux 内核为 2.6.16 的 Debian Etch 上运行时出现了问题。这是一台旧的 Dell PowerEdge 2650 服务器,但以前从未出现过这样的问题,而问题从今天早上开始出现,当时没有进行任何配置或其他更改。

虽然问题表现在很多方面,但所有问题都可能是由于 open() 系统调用完成速度非常慢而导致的。以下是“cat logon.bat”的 strace,其中文件位于本地 ext3 文件系统上:

$ sudo strace -p 3548 -tt 
Process 3548 attached - interrupt to quit
11:20:40.563088 open("logon.bat", O_RDONLY|O_LARGEFILE) = 3
11:21:00.070660 fstat64(3, {st_mode=S_IFREG|0664, st_size=44, ...}) = 0
11:21:00.070923 read(3, "cscript \\\\staff\\netlogon\\logon.v"..., 4096) = 44
11:21:00.085676 write(1, "cscript \\\\staff\\netlogon\\logon.v"..., 44) = 44
11:21:00.085906 read(3, "", 4096)       = 0
11:21:00.086053 close(3)                = 0
11:21:00.086222 close(1)                = 0
11:21:00.086382 exit_group(0)           = ?
Process 3548 detached

时间戳显示 open() 调用耗时 20 秒。(实际上耗时更长,因为 strace 是在命令运行一段时间后开始的。)但同一命令的后续运行不会出现缓慢的 open() 调用。但过了一段时间,它又变慢了。

服务器已重启,问题仍然存在。kern.log 中没有任何报告,硬件也没有报告任何故障。

该服务器仍部分运行,因此我们不会立即关闭它。在工作时间之外,我们将能够运行更多测试,包括对相关文件系统进行强制 fsck。

但我们真的不知道问题可能是什么,所以我们正在寻找可能出现问题的理论,以及运行哪些测试来进一步诊断问题的想法。有什么建议吗?

更新

我应该指出,这个特定的文件系统位于 Apple Xserve RAID 设备上(通过 FiberChannel 连接)。RAID Admin 工具为所有驱动器以及整个阵列提供绿色状态指示灯,并且日志中没有任何事件表明存在任何问题。

答案1

这是在戴尔的 RAID 控制器之一上运行的吗(看起来可能是 PERC/4 之类的)。如果是这样,megaraid 内核驱动程序似乎根本没有反应或报告驱动器问题,您需要安装戴尔的 OpenManage 产品看看硬件层面发生的情况。 此主题建议你安装后使用如下命令

omreport storage controller 
omreport storage adisk controller=0 
omreport storage vdisk controller=0 

这里是 Dell 有关 omreport 的文档。

较新的 Megaraid SAS 控制器(PERC/5)可以单独使用 MegaCLI 来管理它们。

答案2

硬盘真慢啊,蝙蝠侠!太慢了!

这确实看起来像是硬盘上的低级硬件问题。我估计如果你连接了其他驱动器(USB、CD-ROM、本地 SATA IDE),就不会看到这些问题了?如果你还没有尝试过,我建议你这样做。

如果您仍然发现不同磁盘存在问题,则可能需要重新安装操作系统(或者只需从 knoppix 映像/类似程序启动它以进行测试)。查看安装选项和“free”的输出也可能会有所帮助。

相关内容