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 設備上(通過光纖通道連接)。RAID 管理工具為所有驅動器以及整個陣列提供綠色狀態燈,並且日誌中沒有任何事件表明存在任何類型的問題。
這是否在戴爾的一個 RAID 控制器上執行(看起來可能是 PERC/4something)。如果是這樣,megaraid 核心驅動程序似乎根本沒有反應或報告驅動器問題,您需要安裝戴爾的 OpenManage 東西以查看硬體級別的情況。 這個執行緒建議一旦你安裝它,你會使用類似的命令
omreport storage controller omreport storage adisk controller=0 omreport storage vdisk controller=0
這是戴爾關於 omreport 的文件。
較新的 Megaraid SAS 控制器 (PERC/5) 可以單獨使用 MegaCLI 來管理它們。