一次非线上iowait高的状况的检查

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

相关文章
相关标签/搜索