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的字段找到相关的代码逻辑,并减小该逻辑频率。