一、现象

[root@push-- ~]# iotop
otal DISK READ: 0.00 B/s | Total DISK WRITE: 6.26 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
be/ root 0.00 B/s 0.00 B/s 0.00 % 95.80 % [jbd2/dm--]
be/ rabbitmq 0.00 B/s 4.04 M/s 0.00 % 50.10 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ mysql 0.00 B/s 90.05 K/s 0.00 % 16.08 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ rabbitmq 0.00 B/s 52.53 K/s 0.00 % 13.40 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ rabbitmq 0.00 B/s 105.06 K/s 0.00 % 11.76 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ rabbitmq 0.00 B/s 41.27 K/s 0.00 % 10.10 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ rabbitmq 0.00 B/s 48.78 K/s 0.00 % 7.44 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ rabbitmq 0.00 B/s 48.78 K/s 0.00 % 6.55 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ rabbitmq 0.00 B/s 45.03 K/s 0.00 % 6.30 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ rabbitmq 0.00 B/s 26.27 K/s 0.00 % 6.07 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ rabbitmq 0.00 B/s 45.03 K/s 0.00 % 6.02 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ rabbitmq 0.00 B/s 48.78 K/s 0.00 % 4.67 % beam.smp -W w -A -P ~inet_dist_listen_max
be/ mysql 0.00 B/s 0.00 B/s 0.00 % 2.77 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 7.50 K/s 0.00 % 2.72 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 3.75 K/s 0.00 % 1.87 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 3.75 K/s 0.00 % 1.66 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 3.75 K/s 0.00 % 1.62 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 3.75 K/s 0.00 % 1.44 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 3.75 K/s 0.00 % 1.22 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 7.50 K/s 0.00 % 0.89 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 180.11 K/s 0.00 % 0.43 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 11.26 K/s 0.00 % 0.36 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 3.75 K/s 0.00 % 0.03 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock
be/ mysql 0.00 B/s 3.75 K/s 0.00 % 0.02 % mysqld --basedir=/usr --da~=/var/lib/mysql/mysql.sock

发现[jbd2/dm-0-8]这个进程占用IO95%。

二、解决

进入mysql ,查看sync_binlog变量设置

[root@hlsms-fensheng- ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.7. MySQL Community Server (GPL) Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show variables like '%sync_binlog%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog | |
+---------------+-------+
row in set (0.00 sec) mysql>

当前值为1,表示每次提交事务后,将binlog_cache中的数据强制写入磁盘。当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务

当设置为0时,表示当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

所以sync_binlog=1,导致事务写入太频繁,从而出现[jbd2/dm-0-8]这个进程占用IO95%。

因此将sync_log设置为500

mysql> set global sync_binlog=;
Query OK, rows affected (0.00 sec) mysql> show variables like '%sync_binlog%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog | |
+---------------+-------+
row in set (0.00 sec) mysql>

三、设置innodb_flush_log_at_trx_commit变量

innodb_flush_log_at_trx_commit是配置MySql日志何时写入硬盘的参数:

0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。

1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。

2:每次事务提交时mysql都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作\

一般设置为2

mysql> show variables like '%innodb_flush_log_at_trx_commit%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | |
+--------------------------------+-------+
row in set (0.01 sec) mysql> set global innodb_flush_log_at_trx_commit=;
Query OK, rows affected (0.00 sec) mysql> show variables like '%innodb_flush_log_at_trx_commit%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | |
+--------------------------------+-------+
row in set (0.01 sec)

四、验证

再次查看iotop

Total DISK READ: 0.00 B/s | Total DISK WRITE: 781.51 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
be/ root 0.00 B/s 0.00 B/s 0.00 % 6.97 % [jbd2/dm--]
be/ mysql 0.00 B/s 14.47 K/s 0.00 % 4.02 % mysqld --basedir=/usr --datadir=~ocket=/home/data/mysql/mysql.sock
be/ mysql 0.00 B/s 665.73 K/s 0.00 % 2.42 % mysqld --basedir=/usr --datadir=~ocket=/home/data/mysql/mysql.sock
be/ mysql 0.00 B/s 0.00 B/s 0.00 % 1.52 % mysqld --basedir=/usr --datadir=~ocket=/home/data/mysql/mysql.sock
be/ mysql 0.00 B/s 0.00 B/s 0.00 % 0.17 % mysqld --basedir=/usr --datadir=~ocket=/home/data/mysql/mysql.sock
be/ mysql 0.00 B/s 0.00 B/s 0.00 % 0.00 % mysqld --basedir=/usr --datadir=~ocket=/home/data/mysql/mysql.sock
be/ mysql 0.00 B/s 21.71 K/s 0.00 % 0.00 % mysqld --basedir=/usr --datadir=~ocket=/home/data/mysql/mysql.sock
be/ mysql 0.00 B/s 18.09 K/s 0.00 % 0.00 % mysqld --basedir=/usr --datadir=~ocket=/home/data/mysql/mysql.sock
[jbd2/dm-2-8]明显降低

iotop发现jdb2/sdb1-8 io使用过高解决办法的更多相关文章

  1. html页面顶部出现一段空白,检查控制台发现body 下出现&#65279字符,原因及解决办法

    html页面顶部出现一段空白,检查控制台发现body 下出现&#65279字符,原因及解决办法 分析: 原来是页面编码时增加了BOM,此页面后端数据主要是PHP语言,对PHP来讲PHP在设计时 ...

  2. 通过top命令发现plymouthd进程cpu负载达到近100% 解决办法

    最近几天一直遇到服务器cpu100%, 通过top命令发现plymouthd进程cpu负载达到近100% 解决方法:打开 /boot/grub/menu.lst , 去掉 “rhgb quiet”这两 ...

  3. java.io.IOException: Stream closed解决办法

    1.出现这个bug的大体逻辑代码如下: private static void findMovieId() throws Exception { File resultFile = new File( ...

  4. GraphicsMagick java.io.FileNotFoundException: gm 错误解决办法

    GraphicsMagick java.io.FileNotFoundException: gm 解决办法, 方法一: ProcessStarter.setGlobalSearchPath(" ...

  5. eclipse 编译出错(java.io.ObjectInputStream)的解决办法

    Multiple markers at this line - The type java.io.ObjectInputStream cannot be resolved. It is indirec ...

  6. 无法访问gcr.io的几种解决办法

    系列目录 由于一些原因,在国内无法访问gcr.io上的镜像,在安装kubernetes时,很多官方镜像又是都存在gcr.io上,在国内的一些教程中大都使用阿里云的镜像,但是由于阿里云镜像地址更换等原因 ...

  7. 遇到 java.io.EOFException 异常的解决办法

    可以试着clean项目后再启动!原因未明

  8. mysql占用磁盘IO过高的解决办法

    一.现象 最近发现Mysql服务器磁盘IO一直很高 [root@push-- ~]# iostat -k -d -x Linux -.el7.x86_64 (push--) 2019年07月05日 _ ...

  9. 【解决方法】jdb2/sdb1-8 io使用过高

    机器上面跑的mysql,使用的ssd告诉硬盘,但是 使用iotop发现这个进程 jdb2/sdb1-8 使用率高达80%多, 后来发现是因为参数 sync_binlog=1 导致,事务写入太频繁,改为 ...

随机推荐

  1. [mysql]设置创建时间,更新时间未生效

    问题描述: 新增一条case,create_time没有自动生成创建时间,值为空 原因 : create_time字段类型是DateTime(错误)而不是TIMESTAMP(正确)  解决办法: 把c ...

  2. HTML5 WebRTC API无需网络获取本地IP

    因需求需要获取客户端的本机IP,国内资料基本上都是通过向一个IP网站发送请求并获取IP,这样有一定几率泄露自己的IP,在内网环境下也并不适用. 后来在stackoverflow上找到一种解决办法,用W ...

  3. Mysql数据库事务的四大特性:

    什么是事务? 事务Transaction,是指作为一个基本工作单元执行的一系列SQL语句的操作,要么完全地执行,要么完全地都不执行.为什么要使用事务:保证对数据操作的完整性和准确性.1,原子性:一个事 ...

  4. python3.5 字典遍历

    1.遍历字典 dict={'} for key in dict: print(key+':'+dict[key]) ssh://root@192.168.0.204:22/usr/bin/python ...

  5. 使用svctraceviewer查看WCF服务异常信息

    这两天遇到一个问题,调用一个WCF服务的时候,服务器端正常的返回了数据,但是客户端却遇到了一场 System.ServiceModel.CommunicationException: The unde ...

  6. Spring容器启动源码分析

    1. 前言 最近搭建的工程都是基于SpringBoot,简化配置的感觉真爽.但有个以前的项目还是用SpringMvc写的,看到满满的配置xml文件,却有一种想去深入了解的冲动.折腾了好几天,决心去写这 ...

  7. C#学习笔记四(LINQ,错误和异常,异步编程,反射元数据和动态编程)

    LINQ 1.使用类似的数据库语言来操作集合? 错误和异常 异步编程 1.异步和线程的区别: 多线程和异步操作两者都可以达到避免调用线程阻塞的目的.但是,多线程和异步操作还是有一些区别的.而这些区别造 ...

  8. excel常用公式--数据清洗类

    trim:去除单元格两端的空格. concat/&:连接单元格内的内容. mid:  提取字符串中间的字符串. left:  提取字符串左边的字符串. right: 提取字符串右边的字符串. ...

  9. tableau分布式添加节点

    参考: 两节点的安装:https://zhuanlan.zhihu.com/p/44732932https://help.tableau.com/current/server-linux/zh-cn/ ...

  10. 04: CI(持续集成)/CD(持续交付/持续部署)

    1.1 持续集成.持续交付 介绍   参考博客:https://www.cnblogs.com/cay83/p/8856231.html 1.传统交付 1. 传统软件的开发与交付的周期都很漫长,从需求 ...