一次非線上iowait高的情況的檢查

榮耀屬於跪拜貓發表於2015-04-17

一、現象

iowait高達30%。使用iotop查知jbd2/sda6-8佔用60%的io寫入。mongodb每秒寫入達400k。

必然復現

 

二、排查

1、先檢查是不是mongodb引起的

  將mongodb的資料檔案放入tmpfs並在tmpfs上啟動mongodb。iowait降低為正常範圍,說明是由mongodb引起的。

  由於mongodb的直接處理方為另一程式。停止另一程式後iowait降低為正常範圍,說明該事情與該程式操作有關。

 

2、繼續收集資訊

  由於jbd2為ext4的日誌刷寫核心程式,讀取不需要刷日誌,只有寫需要,排查mongdb的寫操作情況。

  抓lo上的包,用wireshark檢視相關資訊,mongodb協議中有不少query和update。由於上面判斷為寫操作,查update相關情況。

 

3、實驗性修改

  考慮實際業務邏輯,認為可以接受丟資料的情況,於是將syncdelay設定為240,即4分鐘刷寫一次磁碟,但沒有改善【存疑,需要查資料】

 

4、生效的修改

  查抓包後update的資訊,根據update的欄位找到相關的程式碼邏輯,並減少該邏輯頻率。

 

相關文章