Freeshell 查明 NFS 常常卡死問題

2015 年 2 月 3 日,freeshell 出現持續兩個小時的 NFS 卡死問題。事實上,2014 年 8 月啓用外部磁盤以來,就常常出現持續幾十秒甚至幾分鐘的 NFS 卡死,卡死期間外部磁盤上的 freeshell 沒法執行任何操做,有的 freeshell 還會由於磁盤操做超時而關機。以前一直覺得是 NFS bug 致使了死鎖,沒有定位到故障緣由,也沒能重現。shell

2 月 3 日,經過 tcpdump 抓包和 strace nfsiod 進程的方法,查明 NFS server not responding 的問題是因爲外部硬盤(一塊希捷的 2T 綠盤)過於繁忙。服務器

在 NFS 卡死的時段,外部磁盤讀的平均延遲可達 600ms,寫的平均延遲是 1400ms。當初設置 NFS 掛載參數的時候,我沒有考慮到磁盤繁忙的問題,只是想到了網絡延遲不該當超過 1 秒,因而就設置了超時 timeo=10,表示 1 秒超時。一個 NFS 請求可能須要分解爲多個磁盤讀請求,這些請求的時間之和極可能超過 1 秒,也就是大部分讀寫請求還沒來得及發給磁盤就超時了,造成了 NFS 服務器失去響應的假象。網絡

下面是 早先的掛載參數
vers=3,rw,rsize=32768,wsize=32768,tcp,timeo=10,retrans=5,soft,intr,sec=sys,lookupcache=all,ac,noctotcp

現將超時修改爲 30 秒(timeo=300)。
vers=3,rw,rsize=32768,wsize=32768,tcp,timeo=300,retrans=5,soft,intr,sec=sys,lookupcache=all,ac,noctocode

2 月 3 日已經修改 fstab,但因爲掛載着的 NFS 不能修改掛載參數(見 man nfs),須要關閉全部外部磁盤上的虛擬機才能從新掛載 NFS。2 月 4 日恰好 1 號節點掛了,因而把全部其餘節點也重啓了一遍,NFS 參數就更新了。server

相關文章
相關標籤/搜索