在Linux上缓慢打开()系统调用

我们在使用Linux内核2.6.16的Debian Etch上运行我们的Samba文件服务器时遇到了问题。 这是一台旧的戴尔PowerEdge 2650服务器,但是它从来没有像以前那样的问题,并且今天上午开始了这个问题,没有做任何configuration或其他更改。

虽然这个问题在很多方面performance出来,但是它们都可能被open()系统调用的缓慢完成所解释。 这里是一个“cat logon.bat”的文件,文件位于本地的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中没有任何报告,硬件没有报告任何错误。

服务器仍然部分运行,所以我们没有立即删除。 在工作时间之外,我们将能够运行更多的testing,包括文件系统上的强制fsck。

但是我们对于问题的可能性并不是很清楚,所以我们正在寻找任何可能出错的理论,以及运行什么样的testing来进一步诊断问题的想法。 有什么build议么?

更新

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

这是运行在一个戴尔的RAID控制器(看起来可能是一个PERC / 4的东西)。 如果是这样,megaraid内核驱动程序似乎没有反应或报告驱动器的问题,你需要安装戴尔的OpenManage的东西 ,看看在硬件上发生了什么。 这个线程build议一旦你安装它,你会使用类似的命令

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

以下是戴尔关于omreport的文档。

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

圣洁的硬盘,蝙蝠侠! 这就是慢!

这确实看起来像硬盘上的低级硬件问题。 我希望如果你连接不同的驱动器(USB,光驱,本地SATA IDE),你没有看到这些问题? 如果你还没有尝试过,我build议你这样做。

如果你仍然看到不同的磁盘有问题,那么重新安装操作系统可能是值得尝试的(或者只是从一个knoppix镜像启动它/类似于testing)。 看到挂载选项和“空闲”输出可能也是有帮助的。