centos6下jbd2进程占用大量IO处理
刚在尝试重现一个bug时,好像在killed mysql一段时间之后,io一直很高,如下:
12:40:01 PM CPU %user %nice %system %iowait %steal %idle 12:50:01 PM all 12.86 0.00 14.40 1.58 0.00 71.16 01:00:01 PM all 13.38 0.00 15.34 1.50 0.00 69.79 01:10:01 PM all 34.34 0.00 21.24 2.13 0.00 42.29 01:20:01 PM all 36.03 0.00 22.13 3.45 0.00 38.40 01:30:01 PM all 36.80 0.00 21.43 2.53 0.00 39.24 01:40:01 PM all 36.86 0.00 20.56 2.26 0.00 40.32 01:50:01 PM all 38.22 0.00 19.26 2.10 0.00 40.41 02:00:01 PM all 36.12 0.00 20.52 1.80 0.00 41.56 02:10:02 PM all 43.75 0.00 20.05 1.97 0.00 34.23 02:20:01 PM all 39.93 0.00 19.16 2.10 0.00 38.81 02:30:01 PM all 43.93 0.00 19.38 5.43 0.00 31.26 02:40:01 PM all 40.27 0.00 21.20 2.21 0.00 36.32 02:50:01 PM all 39.17 0.00 21.56 2.10 0.00 37.16 03:00:01 PM all 48.89 0.00 19.51 4.21 0.00 27.38 03:10:01 PM all 25.04 0.00 16.64 13.96 0.00 44.37 03:20:01 PM all 13.49 0.00 18.75 15.09 0.00 52.67 03:30:01 PM all 12.69 0.00 17.68 15.35 0.00 54.27 03:40:01 PM all 17.22 0.00 13.42 15.50 0.00 53.86 03:50:01 PM all 19.16 0.00 10.48 14.86 0.00 55.49 04:00:01 PM all 11.95 0.00 14.80 15.52 0.00 57.73
iotop了一下,jbd2进程占用大量IO处理,搜索了下,关于jbd2,jbd2是ext4文件系统的一部分。ext4文件系统出现过此bug,bug原理大致是,文件的写和请求会导致其中一个int型的值不断增大,最后增大到超出了自身的范围 —— 变成负值 。就会触发该bug ,而想要达到该值并不容易,需要几个月后才会出现。
解决方法:
1、yum升级kernel ,重启查看是否有效。(在此之前先要做好备机使用的准备工作)
2、重装系统分区,完成后重新挂载数据分区。
3、验证临时补丁的可用性。并在现网修复。
参考:http://www.361way.com/ext4-jbd2-io-bug/2963.html