最近做的一个电商网站因为磁盘 I/O 过高导致访问速度奇慢,问题存在两个月有余未得到解决办法。此次排查原因的经验可以作下次问题的参考。

1、会看懂 top 系统命令出来的各项参数。此次是无意中发现 us% 正常,但是 wa% 很高,才得知是系统磁盘的 I/O 过高导致网站访问慢。

2、会安装和使用监控应用。iotop、pt-ioprofile等工具,都是有助于分析问题所在的应用。借助这些工具,最终定位是MySQL的原因。

3、会用MySQL常用的分析命令。一开始认为分配给MySQL的内存不够,一直在调试MySQL的参数以期可以改善I/O,但是发现这个方向是错误的。
(1)应该先使用 "show processlist",查看MySQL中有哪些线程在跑,最明显要注意哪些sql语句跑了很久还没执行完,"Time"那一列的单位是秒(s),所以这一列的数字上了30都是挺大的性能问题,要关注慢查询了。正是用这个命令,发现了一条sql语句经常执行了几百上千秒还没结束,而且一旦开始执行,I/O就非常高,一旦kill掉这个线程,I/O马上恢复正常,问题的症结就找到了。
(2)还有一个是 "show engine innodb status \G",这个输出的数据是归纳数据库引擎的运行情况的数据,结合上面的命令会更有参考价值。比如死锁(deadlock),因为磁盘 I/O 过高,sql语句很长时间执行不完,会造成数据发生死锁(大概是这么理解)。
(3)MySQL的参数优化也是需要的,安装好的MySQL配置都是默认的,效率比较低,不过这次的问题跟优化没有必然联系,因为之前的项目都没有优化过MySQL。

参考文章:https://blog.csdn.net/zimeng0/article/details/68066146

jdb2导致的IO率过高
http://www.bubuko.com/infodetail-971804.html
https://serverfault.com/questions/363355/io-wait-causing-so-much-slowdown-ext4-jdb2-at-99-io-during-mysql-commit

什么导致MySQL数据库服务器磁盘I/O高?
http://www.xtrdb.net/mysql/MySQL-io-%E8%B0%83%E4%BC%98/
MySQL InnoDB磁盘I/O优化
http://www.ywnds.com/?p=9452

查看磁盘的文件系统
https://blog.csdn.net/lzjsqn/article/details/72059035

IO负载高的来源定位
https://www.cnblogs.com/legendbaby/p/5056967.html

拥有相似问题的解决方案
https://www.jianshu.com/p/36151e44b671

MySQL · 特性分析 · (deleted) 临时空间
http://mysql.taobao.org/monthly/2018/04/08/

Linux系统 磁盘IO过高排查总结的更多相关文章

  1. 磁盘IO过高时的处理办法 针对系统中磁盘IO负载过高的指导性操作

    磁盘IO过高时的处理办法 针对系统中磁盘IO负载过高的指导性操作 主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参 ...

  2. linux 系统磁盘管理体系

    目录 linux 系统磁盘管理体系 一.磁盘的基本概念 二.磁盘的内部结构 三.磁盘的外部结构 四.磁盘的接口及类型 五.fdisk磁盘分区实践 六.gdisk 分区 七.parted 高级分区工具. ...

  3. win10系统磁盘占用率高的解决方法,占用100%的问题

    win10系统开机后明明什么都没做,磁盘占用率却只见飙升到了100%,出现这种情况是win10自带的服务导致的.下面的方法可以解决win10系统磁盘占用率高问题. 1.按下Win+R,然后输入serv ...

  4. Linux系统磁盘分区、删除分区、格式化、挂载、卸载、开机自动挂载的方法总结

    Linux系统按照MBR(Master Boot Record)传统分区模式: 注意:传统的MBR(Master Boot Record)分区方式最大只能分2T容量的硬盘,超过2T的硬盘一般采用GPT ...

  5. linux 系统磁盘管理(主分区和逻辑分区)

    摘要:linux系统磁盘管理主分区和逻辑分区 1.linux系统分区应了解的常识 硬盘分区实质上是对硬盘的一种格式化,然后才能使用硬盘保存各种信息,在创建分区时,就已经设置好了硬盘的各项物理参数,指定 ...

  6. linux 磁盘io利用率高,分析的正确姿势

    一.背景简介 作为一个DBA难免不了会遇到性能问题,那么我们遇到性能问题该如何进行排查呢?例如我们在高并发的业务下,出现业务响应慢,处理时间长我们又该如何入手进行排查,本片文章将分析io高的情况下如何 ...

  7. Linux 查看磁盘IO并找出占用IO读写很高的进程

    背景-线上告警 线上一台服务器告警,磁盘利用率 disk.util > 90,并持续告警. 登录该服务器后通过 iostat -x 1 10 查看了相关磁盘使用信息.相关截图如下: # 如果没有 ...

  8. linux查看磁盘io的几种方法

    怎样才能快速的定位到并发高是由于磁盘io开销大呢?可以通过三种方式: 第一种:用 top 命令 中的cpu 信息观察 Top可以看到的cpu信息有: Tasks: 29 total, 1 runnin ...

  9. 磁盘IO过高时的处理办法

    针对系统中磁盘IO负载过高的指导性操作 主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参考,如果磁盘IO确实比较大 ...

随机推荐

  1. linux(centos7)设置tomcat开机启动

    1.在/etc/rc.d/rc.local中加入: #java environment export JAVA_HOME=/usr/java/jdk1.8.0_161 export CLASSPATH ...

  2. Java中equals,hashcode,==的区别

    ==  :比较java栈局部变量表中变量的地址或值是否相等. equals : 比较变量的地址在java堆中引用对象是否为同一个对象. hashcode : 通过对象在JVM内存中的存储地址通过特定算 ...

  3. 大疆2019校招FPGA笔试总结

    1.对于同步fifo,每100个cycle可以写入80个数据,每10个cycle可以读出8个数据,fifo的深度至少为? 写时钟频率 w_clk, 读时钟频率 r_clk, 写时钟周期里,每B个时钟周 ...

  4. C#中string.Format 用法详解

    这篇文章主要介绍了C#中string.format用法,以实例形式较为详细的讲述了string.format格式化的各种用法,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中string. ...

  5. ADB——查看手机设备信息

    查看设备信息 查看手机型号 adb shell getprop ro.product.model 查看电池状况 adb shell dumpsys battery ''' Current Batter ...

  6. [svc]tcp三次握手四次挥手&tcp的11种状态(半连接)&tcp的time-wait

    TCP的状态转化过程(11种状态)以及TIME_WAIT状态 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 我相信很多都遇到过这个问题.一旦有用户在喊:网络变慢了.第一件事情就 ...

  7. MFC DDX_Control 与 DDX_Text

    DDX_TEXT()的作用可以理解为把字符串变量和控件的文本(WindowText)关联起来, DDX_Control()的作用可以理解为把变量和控件本身关联起来, DoDataExchange(pD ...

  8. JAVA8 中 LocalDateTime的使用小栗子

    LocalDate givenDate = LocalDate.parse("2019-04-23",DateTimeFormatter.ofPattern("yyyy- ...

  9. 为什么CentOS7中找不到mysql服务,并且还找不到mysql.sock?

    个人遇到问题的经过: 我一个月前买了云主机,UI图画好了,前端也写了,php如何开发也想好了,结果呢,安装apache是成功了,mysql看样子也是安装成功了,但是mysql根本无法运行起来,搞得我无 ...

  10. JDK8 HashMap--getTreeNode()获取红黑树指定key的节点

    /*获取红黑树的指定节点*/ final TreeNode<K,V> getTreeNode(int h, Object k) { return ((parent != null) ? r ...