linux上定位磁盘IO问题

本文介绍了通过top命令查看CPU的wa参数、vmstat命令监控系统资源及iostat工具检查磁盘活动三种方法,帮助您迅速判断系统性能瓶颈是否由磁盘I/O引起。
怎样才能快速的定位到并发高是由于磁盘io开销大呢?可以通过三种方式:

  第一种:用 top 命令 中的cpu 信息观察

  Top可以看到的cpu信息有:

  Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie

  Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si

  具体的解释如下:

  Tasks: 29 total 进程总数

  1 running 正在运行的进程数

  28 sleeping 睡眠的进程数

  0 stopped 停止的进程数

  0 zombie 僵尸进程数

  Cpu(s):

  0.3% us 用户空间占用CPU百分比

  1.0% sy 内核空间占用CPU百分比

  0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比

  98.7% id 空闲CPU百分比

  0.0% wa 等待输入输出的CPU时间百分比

  0.0% hi

  0.0% si

  0.0% wa 的百分比可以大致的体现出当前的磁盘io请求是否频繁。如果 wa的数量比较大,说明等待输入输出的的io比较多。

  第二种:用vmstat

  vmstat 命令报告关于线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。

  输入命令:

  vmstat 2 5

  如果发现等待的进程和处在非中断睡眠状态的进程数非常多,并且发送到块设备的块数和从块设备接收到的块数非常大,那就说明磁盘io比较多。

  vmstat参数解释:

  Procs

  r: 等待运行的进程数 b: 处在非中断睡眠状态的进程数 w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但 linux 并不耗尽交换空间

  Memory

  swpd: 虚拟内存使用情况,单位:KB

  free: 空闲的内存,单位KB

  buff: 被用来做为缓存的内存数,单位:KB

  Swap

  si: 从磁盘交换到内存的交换页数量,单位:KB/秒

  so: 从内存交换到磁盘的交换页数量,单位:KB/秒

  IO

  bi: 发送到块设备的块数,单位:块/秒

  bo: 从块设备接收到的块数,单位:块/秒

  System

  in: 每秒的中断数,包括时钟中断

  cs: 每秒的环境(上下文)切换次数

  CPU

  按 CPU 的总使用百分比来显示

  us: CPU 使用时间

  sy: CPU 系统使用时间

  id: 闲置时间

  准测

  更多vmstat使用信息

  第二种:用iostat

  安装:

  Iostat 是 sysstat 工具集的一个工具,需要安装。

  Centos的安装方式是:

  yum install sysstat

  Ubuntu的安装方式是:

  aptitude install sysstat

  使用:

  iostat -dx 显示磁盘扩展信息

  root@fileapp:~# iostat -dx

  r/s 和 w/s 分别是每秒的读操作和写操作,而rKB/s 和wKB/s 列以每秒千字节为单位显示了读和写的数据量

  如果这两对数据值都很高的话说明磁盘io操作是很频繁。

<think>我们正在回答用户关于“Linux系统查看硬件磁盘IO占用的方法”的问题。参考提供的引用材料,我们可以总结出以下几种常用的方法: 1. 使用`iostat`命令:这是sysstat包的一部分,可以监控系统的磁盘IO情况。 2. 使用`iotop`命令:一个类似top的工具,用于实时查看磁盘IO占用情况,按进程显示。 3. 使用`sar`命令:也是sysstat包的一部分,可以收集、报告和保存系统活动信息,包括磁盘IO。 根据引用[5],`iostat`命令的输出列详细解释了磁盘IO的各个指标,如读写速度、等待时间、利用率等。 根据引用[4],`iotop`可以直接查看哪些进程占用了较高的磁盘IO。 根据引用[3],`sar`命令可以查看磁盘IO以及传递速率(使用`-b`选项)等。 因此,我们可以向用户介绍这三种主要方法,并给出基本的使用示例。 注意:在回答中,我们不需要输出引用标识,但需要遵循系统级指令,包括数学表达式的格式要求(虽然本问题中可能不涉及,但如果有公式则需要用$...$或$$...$$)。另外,我们需要用中文回答,并且生成相关问题。 由于用户的问题是关于“硬件磁盘IO占用”,我们关注的是整个硬盘设备的IO情况,而不仅仅是进程级别。因此,`iostat`和`sar`更适合查看硬件级别的磁盘IO,而`iotop`则是进程级别的。 回答结构: 1. 介绍查看硬件磁盘IO占用的常用命令。 2. 分别说明每个命令的使用方法和常用参数。 3. 提供简单的示例。 4. 生成相关问题。 注意:用户要求的是“硬件磁盘IO占用”,所以重点放在整个磁盘设备的利用率(如%util)、读写速度等。 </think>### Linux系统查看硬件磁盘IO占用的方法 在Linux系统中,可通过以下方法监控硬件磁盘IO占用情况: #### 1. **iostat工具**(实时监控磁盘IO) 这是最直接的硬件级监控工具,来自`sysstat`包: ```bash iostat -dx 1 # 每1秒刷新一次磁盘设备统计 ``` **关键指标解读**(参考引用[5]): - `%util`:**磁盘利用率**(核心指标,值>90%表示磁盘饱和) - `rkB/s` `wkB/s`:读写速度(KB/s) - `await`:IO请求平均等待时间(毫秒) - `avgqu-sz`:平均等待队列长度 示例输出: ``` Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await %util sda: 0.00 1.00 50 20 4000 800 96.0 1.50 25.0 70.00 ``` #### 2. **sar工具**(历史数据分析) 收集磁盘历史性能数据(需安装`sysstat`): ```bash sar -d -p 1 3 # 每1秒采样,共3次(-p显示设备名) ``` **关键参数**(参考引用[3]): - `-b`:IO传输速率统计 - `-d`:块设备活动详情 - `-o`:保存数据到文件(通过`-f`读取) #### 3. **dd简易测试**(基准测试) 测试磁盘连续读写性能(参考引用[2]): ```bash # 写测试(生成1GB文件) dd if=/dev/zero of=./testfile bs=1M count=1024 oflag=direct # 读测试 dd if=./testfile of=/dev/null bs=1M iflag=direct ``` **注意**:`oflag=direct`绕过缓存获取真实磁盘性能 #### 4. **定位IO进程** 当`%util`过高时,用`iotop`定位具体进程(参考引用[4]): ```bash sudo iotop -oP # 只显示活跃IO进程 ``` 输出包含: - 进程ID、用户 - 磁盘读/写速率 - IO占比百分比 --- ### 常用命令对比 | 命令 | 监控级别 | 特点 | 适用场景 | |---------|------------|--------------------------|------------------| | `iostat`| 硬件设备 | 实时设备级指标 | 快速诊断磁盘瓶颈 | | `sar` | 系统级 | 历史数据分析 | 性能趋势分析 | | `iotop` | 进程级 | 实时进程IO排名 | 定位问题进程 | | `dd` | 硬件基准 | 原始性能测试 | 评估磁盘上限 | > 提示:`sysstat`包安装命令: > Ubuntu/Debian: `sudo apt install sysstat` > CentOS/RHEL: `sudo yum install sysstat` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值