一、現象
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的欄位找到相關的程式碼邏輯,並減少該邏輯頻率。