`

IO负载高的来源定位

    博客分类:
  • IO
 
阅读更多

前言:

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

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

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

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

 

工具准备:

iotop: http://guichaz.free.fr/iotop/

pt-ioprofile:http://www.percona.com/downloads/percona-toolkit/2.2.1/

 


 

Step1 : iostat 查看IO情况

iostat -x 1 查看IO情况,从下图可以看到dfa这个磁盘的IO负载较高,接下来我们就来定位具体的负载来源

 


 

Step2: iotop定位负载来源进程

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

从下图可以看出大部分的IO来源都来自于mysqld进程。因此可以确定dfa的负载来源是数据库

 

 


 

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

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

以下是摘自官网的一段警示:

However, it works by attaching strace to the process using ptrace(), which will make it run very slowly until strace detaches. In addition to freezing the server, there is also some risk of the process crashing or performing badly after strace detaches from it, or indeed of strace not detaching cleanly and leaving the process in a sleeping state. As a result, this should be considered an intrusive tool, and should not be used on production servers unless you are comfortable with that.

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

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

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

 

从上图可以看出IO负载的主要来源是sbtest (sysbench的IO bound OLTP测试)。

并且压力主要集中在读取上。

 

分享到:
评论

相关推荐

    线上系统性问题定位与方法论.docx

    软件层包括负载均衡服务器、JDK 版本、web 服务器、数据库和缓存等软件环境信息。应用层包括关键接口的平均响应时间、服务的 QPS 和某个接口的并发数等信息。 评估问题影响范围 一个问题究竟影响了多大范围的用户...

    【JavaScript源代码】NodeJs内存占用过高的排查实战记录.docx

    ### Node.js 内存占用过高排查实战记录 #### 背景介绍 本文记录了一次线上容器...未来面对类似问题时,可先从服务负载、内存快照分析入手,再逐步深入到代码审查及特殊场景的模拟测试中,从而更高效地定位并解决问题。

    MySQL数据库疑难杂症排查.pptx

    * 检查系统负载是否高,读取缓慢 五、结论 在本文中,我们对 MySQL 数据库的常见问题进行了排查和解决。我们可以通过确认问题的来源、确认 MySQL 存在瓶颈、优化 MySQL 性能和解决 Sending data 状況等步骤来解决 ...

    可视化调优-快速数据库优化实践.pdf

    此外,可视化工具还可以帮助DBA快速定位问题来源,并给出相应的性能分析与建议,从而采取有效的优化措施。 综上所述,可视化调优实践是数据库优化领域中一个重要的分支,通过图形化手段使得复杂的优化过程变得直观...

    构建高性能的大型分布式java应用

    类加载器负责从文件系统或其他来源加载字节码到JVM中。 **3.2 JVM内存管理** JVM内存管理主要包括堆内存和非堆内存的管理。堆内存用于存储对象实例和数组,非堆内存用于存储方法区、线程栈等。垃圾回收机制是自动...

    大数据时代的分布式智能取证分析技术.pdf

    大数据分析需要在海量数据中快速定位、提取、分析有价值的信息,这对计算能力、存储性能及算法优化提出了极高的要求。 随着技术的创新,取证分析也必须不断进步。目前,取证分析过程面临的挑战主要体现在分析耗时...

    linux服务器故障之运维经验总结归纳.pdf

    本文旨在总结 Linux 服务器故障的运维经验,旨在帮助运维人员快速定位和解决服务器故障问题。本文将从服务器故障的前因后果、问题出现的原因、故障的特点、监控平台、日志查看、用户访问记录、命令执行记录、进程...

    Mycat命令行监控指南5

    这在排查异常SQL和事务问题时特别有价值,通过ID与`show @@connection`的前端连接ID对应,可以定位问题来源。 4. **监控线程池状态**: `show @@threadpool`命令展示线程池的执行情况,包括活跃线程数(`active_...

    ORACLE性能优化工具整理.pdf

    系统统计信息提供了系统的总体性能概况,如系统已使用的CPU时间、用户进程数量、IO请求等。 综上所述,AWR是Oracle性能优化中至关重要的工具之一,它通过收集、存储和分析数据库的运行数据,为DBA提供了一套全面的...

    离线卫星地图IOS端SDK及解决方案.pdf

    同时,它考虑了网络IO的问题,通过网络分流和负载均衡策略来应对高并发访问。 综上,Bigemap为iOS端提供了离线卫星地图SDK和全面的解决方案,覆盖了从数据采集、处理、存储到服务的全过程,助力开发者高效、稳定地...

    海量服务下的精准运维.pdf

    异常明细分析有助于深入理解问题,调用来源的清晰展示能帮助快速定位问题源头。实时容量规划是根据当前业务负载动态调整资源分配,以避免资源浪费或性能瓶颈。 依赖分析是运维中的另一关键环节。分析服务间的强依赖...

    ACOUG-如何分析AWR报告

    AWR报告中的数据主要来源于一系列以`DBA_HIST_`开头的系统表。Oracle官方文档《Database Reference》中详细描述了这些系统表,可以作为官方对于AWR报告解释的重要参考。 对于如何有效地分析AWR报告,需要DBA具备...

    单片机上电后没有运转

    此外,晶振不起振也可能表现为复位状态下IO口电平异常,此时应检查晶振电路和相关的负载电容。 4. **EA引脚状态**:对于使用片内ROM的单片机,EA引脚通常需要被拉高,否则程序可能会在错误的地址执行,导致系统混乱...

    搜索引擎.NET_搜索链接应用程序.rar

    开发者可以借助.NET框架快速构建高性能、跨平台的应用程序。在本项目中,.NET框架的类库和组件将成为构建搜索引擎的基础。 二、搜索引擎原理 搜索引擎主要由爬虫、索引和查询解析三部分组成。爬虫负责从互联网上...

    unix 和oracle的题目

    - **IO性能**:`iostat`监控I/O负载,优化可能涉及调整操作系统参数、优化SQL语句、合理分配表空间等。 - **CPU性能**:`sar -u t n`观察CPU使用情况,过高可能需要优化SQL、分配更多内存或升级硬件。 - **内存...

    ACOUG-如何分析AWR报告.pdf

    - **数据来源**:AWR报告中的所有数据都来源于以`DBA_HIST_`开头的一系列系统表,Oracle官方文档中对此有详细的描述。 - **分析作用**:通过对AWR报告的分析,DBA能够更好地识别数据库性能瓶颈,并据此进行相应的...

    KMDFstudy.zip_驱动编程_Visual_C++_

    5. **IRP处理**:定义EVT_WDF_IO_QUEUE_IO_Xxx回调函数,如EVT_WDF_IO_QUEUE_IO_READ和EVT_WDF_IO_QUEUE_IO_WRITE,处理读写请求。 6. **同步与并发**:理解KMDF中的同步机制,如I/O队列的同步模式(同步、并发、...

    互联网高频Java后端面试题20道(适合1~3年).docx

    异常链机制允许在捕获和处理异常时,不仅报告当前发生的异常,还能追溯到最初的错误来源,这对于排查问题非常有用。9. 问题:什么是Java集合框架,它包含哪些主要部分? 答案:Java集合框架是Java API中的一组接口和...

    VInTouch:一个基于 node.js 的聊天应用程序,就像 omegle

    10. **部署与扩展**:考虑到可能的高并发访问,VInTouch 可能会使用负载均衡和集群技术来部署,确保应用能够应对大量用户同时在线的情况。 通过对 VInTouch 项目的源代码(VInTouch-master 文件夹中的内容)进行...

Global site tag (gtag.js) - Google Analytics