nfs和D(disk sleep)狀態卡死進程的那些事

有些博主,dmesg和/proc/pid/stack信息看不懂就別瞎幾把往外貼

貼了你倒是分析一下啊

for example:

我寫這篇帖子時我並沒有找到合適的解決方案,而是搜索很多內容後發現網上一堆複製粘貼的內容,並沒有實質性的分析與探討,反而國外的論壇裏這類討論更多些。

先說下我的分析,背景是:

nfs服務端(1臺) 內存buff/cache 90%,available 90%,top命令中wa爲15左右;存在一定的io負載。

iotop磁盤總寫速率爲50M每秒(目前nfs的瓶頸了,我的優化空間可能還不夠)

nfs 客戶端(一共15臺,即上圖錯誤所在的服務器是其中一臺 )  內存信息同服務端,top 命令中wa 30~50左右,cpu利用率很低,load avge 1000+(沒看錯,就是這麼高),客戶端上Iotop中讀和寫總速率才200KB左右

分析正文:

客戶端iotop讀寫速率和iowait不成比例,正常情況下讀寫速率很大才會伴有iowait的發生,此現象說明瓶頸並不是在磁盤io中,應該在網絡存儲nfs,nfs客戶端速率爲什麼這麼低呢,我認爲是nfs server端採用了sync模式傳輸數據,在nfs 的sync模式中出於數據安全性,會依次排隊處理客戶端的請求,此時nfs客戶端多線程程序對nfs目錄觸發的請求得不到滿足,不斷增加io負載,造成nfs內存緩衝頁數據交換失敗(你們就聽我扯吧,技術不行,目前只是分析)。

內存緩衝頁數據交換:

目前對這個名詞不怎麼了解,感覺和這兩個有關(有理解的可以分享一下):

# sysctl -a | grep dirty | grep ratio
vm.dirty_background_ratio = 10
vm.dirty_ratio = 30

這次問題的發生,我並沒有修改上圖兩個值,而是將nfs sync模式改爲async模式,因爲我覺得這是nfs server端引起的,客戶端資源io阻塞,以此來加快傳輸速度。並且增客戶端的timeo項,延長nfs客戶端等待時間。

其實主要問題還是在於nfs-server文件存儲數據傳輸的速率,目前我這邊最大寫速率爲50M/s。如果有更高的配置方式,請留下一些及建議。

目前我的配置形式:

Nfs server端配置:

rw,fsid=0,async,no_subtree_check,no_auth_nlm,insecure,no_root_squash

Nfs client端配置:

-o rsize=1048576,wsize=1048576,hard,intr,timeo=5,retry=10

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章