磁盘io飙升分析

本文讲述了通过iostat、iotop和pt-ioprofile解决服务器高IO负载问题的实用技巧,重点介绍如何利用这些工具定位问题根源。
摘要由CSDN通过智能技术生成

前言:

在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的util),但是无法快速的定位到IO负载的来源进程和来源文件导致无法进行相应的策略来解决问题。

这个现象在MySQL上更为常见,在5.6(performance_schema提供io instrument)之前,我们通常只能猜到是MySQL导致的高IO,但是没法定位具体是哪个文件带来的负载。

例如是ibdata的刷写?还是冷门ibd的随机读取?

本文就将介绍一个比较简单的定位IO高负载的流程

工具准备:

iotop:Iotop's homepage

pt-ioprofile:pt-ioprofile — Percona Toolkit Documentation

Step1 : iostat 查看IO情况

 iostat -x 1 10 查看IO情况,接下来我们就来定位具体的负载来源

 Step2: iotop定位负载来源进程

 iotop的本质是一个python脚本,从proc中获取thread的IO信息,进行汇总。

Step3 pt-ioprofile定位负载来源文件

 pt-ioprofile的原理是对某个pid附加一个strace进程进行IO分析。

备注:pt-ioprofile是侵入式工具,不建议在生产环境使用

通过ps aux|grep mysqld 找到 mysqld进程对应的进程号,通过pt-ioprofile查看哪个文件的IO占用时间最多。

默认参数下该工具展示的是IO占用的时间。

pt-ioprofile -p 进程号

对于定位问题更有用的是通过IO的吞吐量来进行定位。使用参数 --cell=sizes,该参数将结果已 B/s 的方式展示出来

pt-ioprofile -p 进程号 --cell=sizes

iotop使用说明:

可以用左右箭头操作,按 r 是相反方向,按 o 是动态切换

用法 iotop -参数

–version 查看版本信息的 
-h, –help 查看帮助信息的 
-o, –only 只显示在划硬盘的程序
-b, –batch 批量处理 用来记录日志的 
-n NUM  设定循环几次 
-d SEC, –delay=SEC  设定显示时间间隔

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值