1、現象mongodb
iowait高達30%。使用iotop查知jbd2/sda6-8佔用60%的io寫入。mongodb每秒寫入達400k。日誌
必然復現進程
2、排查it
一、先檢查是否是mongodb引發的io
將mongodb的數據文件放入tmpfs並在tmpfs上啓動mongodb。iowait下降爲正常範圍,說明是由mongodb引發的。date
因爲mongodb的直接處理方爲另外一進程。中止另外一進程後iowait下降爲正常範圍,說明該事情與該進程操做有關。數據
二、繼續收集信息協議
因爲jbd2爲ext4的日誌刷寫內核進程,讀取不須要刷日誌,只有寫須要,排查mongdb的寫操做狀況。gdb
抓lo上的包,用wireshark查看相關信息,mongodb協議中有很多query和update。因爲上面判斷爲寫操做,查update相關狀況。top
三、實驗性修改
考慮實際業務邏輯,認爲能夠接受丟數據的狀況,因而將syncdelay設置爲240,即4分鐘刷寫一次磁盤,但沒有改善【存疑,須要查資料】
四、生效的修改
查抓包後update的信息,根據update的字段找到相關的代碼邏輯,並減小該邏輯頻率。