linux上定位磁盘IO问题

本文介绍了通过top命令查看CPU的wa参数、vmstat命令监控系统资源及iostat工具检查磁盘活动三种方法,帮助您迅速判断系统性能瓶颈是否由磁盘I/O引起。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎样才能快速的定位到并发高是由于磁盘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操作是很频繁。

### 如何在 Linux 系统中监控和查看磁盘 IO 使用情况 #### 工具简介 `iostat` 是一种常用的工具,可以用来获取存储设备及其分区的 I/O 统计信息。它是 `sysstat` 软件包的一部分,在大多数基于 Red Hat 和 Debian 的系统上都可以轻松安装并使用[^2]。 对于基于 Red Hat 的系统(如 CentOS 或 Fedora),可以通过以下命令来安装该工具: ```bash sudo yum install sysstat # 对于 CentOS 7 及以下版本 # 或者 sudo dnf install sysstat # 对于 CentOS 8、Fedora 或其他使用 dnf 的发行版 ``` 而对于基于 Debian 的系统(如 Ubuntu),则可以运行以下命令进行安装: ```bash sudo apt-get update && sudo apt-get install sysstat ``` #### 常见用法 以下是几个常见的 `iostat` 参数组合及其作用: 1. **基本统计信息** 单独执行 `iostat` 将显示从系统启动以来的 CPU 和磁盘 I/O 平均统计数据[^5]: ```bash iostat ``` 2. **仅显示磁盘 I/O 数据** 如果只需要关注磁盘 I/O 性能数据,则可加上 `-d` 参数: ```bash iostat -d ``` 3. **扩展模式下的详细指标** 添加 `-x` 参数可以让 `iostat` 提供更加详细的磁盘性能指标,例如平均请求大小 (`avgrq-sz`)、队列长度 (`avgqu-sz`)、等待时间 (`await`) 等[^4]: ```bash iostat -dx 1 ``` 上述命令将以每秒一次的时间间隔持续更新磁盘 I/O 的详细信息。 4. **指定采样频率与次数** 用户还可以定义采样的时间和总次数。例如,下面这条命令表示每隔两秒钟采集一次数据,并重复五次: ```bash iostat -dx 2 5 ``` #### 输出解释 当运行上述命令时,通常会得到如下结构的数据表: | 字段 | 描述 | |--------------|----------------------------------------------------------------------| | `%user`, `%system`, `%iowait` | 表示 CPU 时间分配给用户进程、系统内核以及因 I/O 阻塞所浪费的比例 | | `rrqm/s`, `wrqm/s` | 每秒被合并的读取/写入请求数量 | | `r/s`, `w/s` | 每秒完成的实际物理读取/写入操作数 | | `rkB/s`, `wkB/s` | 每秒传输的数据总量 (单位为 KB) | | `svctm` | 完成单个 I/O 请求所需的服务时间 | 这些字段可以帮助管理员快速定位是否存在瓶颈问题或者优化方向。 #### 其他辅助方法 除了利用专门设计好的程序外,还有几种简单直观的方式能够帮助理解当前主机上的磁盘负载状况: - **通过 `/proc/diskstats` 文件分析** 此文件包含了所有块设备的相关活动记录,虽然原始形式较难解读,但配合脚本处理后非常有用。 - **借助第三方图形界面工具** 若希望获得更为友好的可视化体验,推荐尝试 Glances、Netdata 这类现代监控解决方案,它们不仅支持丰富的插件功能而且易于部署配置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值