JDB2导致磁盘io使用率高

前几天碰到jbd2进程占用大量的磁盘io,用iotop查看到的情况大致如下:

系统版本:CentOS6.5-64bit

经查为ext4文件系统的一个bug:

先给出解决方案,处理此问题的优先级为:

1、yum update kernel 用yum升级系统内核,重启之后查看是否有效;

2、缓解方法:修改commit值,降低文件系统提交次数或者禁用barrier特性;

建议文件系统参数为:defaults,noatime,nodiratime,barrier=0,data=writeback,commit=60

(可以通过修改fstab表或者remount重新挂载)

3、慎用方法:关闭文件系统日志功能     tune2fs -O "^has_journal" 例如: tune2fs -O "^has_journal" /dev/mapper/VolGroup-lv_home

-----------------------------------------------------------------------

通过查资料,整理相关信息,解释如下;

1、jbd的全拼是journaling block driver 文件系统的日志功能,jbd2是ext4文件系统版本;可以肯定的是对文件系统的操作太频繁,导致IO压力过大。

常用的文件系统使用日志功能来保证文件系统的完整性,在写入新的数据到磁盘之前,会先将元数据写入日志;这样做可以保证在写入真实数据前后,一旦发生错误,

日志功能将很容易回滚到之前的状态,确保不会发生文件系统崩溃的情况;

2、而现在的磁盘上一般都配有内部缓存,以便重新调整批量数据的写入顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写commit(commit=xx 每xx秒同步所有的数据和元数据。默认是每5秒)记录;若commit记录写入在先,而日志有可能损坏,就会影响数据完整性;EXT4文件系统默认启用barrier功能,只有当barrier之前的数据全部写入磁盘,才能写barrier之后的数据;barrier的存在保证了数据完整性;

3、使用barrier特性的不利之处在于,需要付出降低性能的代价;可以通过挂载项 mount -o barrier=0来禁用此特性;

可通过查看/proc/mounts里的barrier值 为1代表启用

4、文件的写和请求会导致其中一个int型的值不断增大,最后超出了自身范围---变成负值,就会触发该bug;

具体原理参考下链接:

http://blog.donghao.org/2013/03/20/%E4%BF%AE%E5%A4%8Dext4%E6%97%A5%E5%BF%97%EF%BC%88jbd2%EF%BC%89bug/

5、所以我们可以通过降低文件系统的提交次数来缓解IO压力(相关参数commit);或者禁用barrier特性(相关参数barrier=0 );

而考虑到此bug网上已经有人提出了,貌似当时还有人提供了临时修复补丁,这么长时间过去之后,官方kernel里也应该做了相应的更新;所以当大家碰到这个问题时,首先的建议是

升级下kernel(升级之前建议做好数据备份),重启之后查看是否生效!

时间: 2025-01-16 08:40:37

JDB2导致磁盘io使用率高的相关文章

记一次性能测试:mysql占用磁盘IO过高 的解决过程

在一次性能测试时,发现mysql的cpu使用率不高,但是磁盘io很高, 一开始考虑是mysql的慢日志比较多,但是查看后发现慢日志并不多,而且只有一台mysql. 进入实例,查看sync_binlog变量 mysql> show variables like '%sync_binlog%' -> ; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sync_binlog | 1 |

一个查询交易导致数据库CPU使用率高的问题

这一阵子在做一个查询交易的压力测试,使用的AIX+informix数据库.应用和数据库分别部署在两台机器上.使用loadrunner进行并发测试.相关表的历史数据是20W级别的.使用20个并发进行测试. 测试过程中,应用服务器负载正常,数据库服务器磁盘.网络使用率正常,但是CPU使用率却是98%左右.觉得很奇怪,因为这台机器是测试环境中性能最好的,表现不应该如此.于是先猜测会不会是informix的参数配置不对,于是搜了些informix参数中影响CPU使用率的参数调了一遍,但是现象依旧.对里面

磁盘IO过高时的处理办法

针对系统中磁盘IO负载过高的指导性操作 主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参考,如果磁盘IO确实比较大的话,是数据库,可以进行读写分离或者分库操作,减小磁盘压力,文件的话,可以利用raid来减轻压力 一)I/O调度程序的总结: 1)当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.2)每个块设备都有它自己的队列.3)I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O

MYSQL数据库服务磁盘IO高问题分析与优化

压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用TOP 或者nmon等查看CPU.内存使用情况,然后在排查IO问题,例如网络IO.磁盘IO的问题. 如果是磁盘IO问题,一般问题是SQL语法问题.MYSQL参数配置问题.服务器自身硬件瓶颈导致IOPS吞吐率问题. 今天主要是讲解MYSQL 参数配置不合理导致在高并发下磁盘IO问题,而MYSQL整体监控优化方案后面会整理<如何轻

Linux下java获取CPU、内存、磁盘IO、网络带宽使用率

一.CPU 使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数." 从/proc文件系统获取cpu使用情况:    cat /proc/stat 在Linux的内核中,有一个全 局变量:Jiffies. Jiffies代表时间.它的单位随硬件平台的不同而不同.系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目.这样ji

记一次服务器IO过高处理过程

一.背景 在一次上线升级后,发现两台tomcat服务器的IOwait一直超过100ms,高峰时甚至超过300ms,检查服务器发现CPU负载,内存的使用率都不高.问题可能出现在硬盘读写,而且那块硬盘除了写日志外,没有其他的IO操作.最后发现是应用打印的日志信息太多,导致磁盘IO负载过高. 二.寻求解决过程 通过查找资料发现,Linux是用pdflush进程把数据从缓存页写入硬盘的,那么通过修改pdflush的一些参数应该可以改善IO负载问题. pdflush的行为受/proc/sys/vm中的参数

磁盘IO的概念

转载自:http://blog.csdn.net/letterwuyu/article/details/53542291 在数据库优化和存储规划过程中,总会提到IO的一些重要概念,在这里就详细记录一下,对这个概念的熟悉程度也决定了对数据库与存储优化的理解程度,以下这些概念并非权威文档,权威程度肯定就不能说了. 读/写IO,最为常见说法,读IO,就是发指令,从磁盘读取某段扇区的内容.指令一般是通知磁盘开始扇区位置,然后给出需要从这个初始扇区往后读取的连续扇区个数,同时给出动作是读,还是写.磁盘收到

mysql磁盘IO%util 居高不下之RAID卡 BBU Learn Cycle周期

最近遇到一个奇怪的问题 收到短信报警说磁盘IO很高 复制延迟 iostat -x 1 10 信息如下: QPS 如下: 负载很低  压力很低 这就很无解了. 只有一个MYSQL 其实这是个硬件问题 ,就是 MegaSAS RAID卡 BBU Learn Cycle周期 背景 最近遇到有些带MegaSAS RAID卡的服务器,在业务高峰时突然IO负载飚升得很高,IO性能急剧下降,查了日志及各种设置最后才发现是RAID卡的Cache写策略由WriteBack变成WriteThrough了.更深入的原

008_falcon磁盘io计算方法

一.falcon磁盘IO告警计算方法 (1)线上告警示例 [falcon]环境: prod 时间: 2018-11-10 22:29 共1条 [#主机磁盘io过高(appid)]主机hostname磁盘dfa io过高98.76>98% (2)cat /proc/diskstats 252 0 dfa 2689642164 0 513826977162 100403006 6803204529 0 1348198360088 2893131263 0 934780608 3002409596 每