Linux 文件 IO 性能监控与分析指南

news2025/6/2 3:33:51

Linux 文件 I/O 性能监控与分析指南

继 CPU 和网络之后,文件系统 I/O 是影响系统性能的第三大关键领域。无论是数据库响应缓慢、应用加载时间过长,还是日志写入延迟,其根源都可能指向磁盘 I/O 瓶颈。本章将深入探讨文件 I/O 的核心概念、监控指标,并详细拆解 iostatsysbench 等一系列核心命令,确保覆盖您提供的所有内容,助您成为 I/O 性能调优专家。

第一部分:文件 I/O 核心概念

在开始监控之前,我们必须理解衡量文件 I/O 性能的关键指标以及其背后的工作原理。

I/O 性能指标

  • 读/写速度: 即吞吐量,衡量单位时间内成功传输的数据量。
  • 读/写次数 (IOPS): 每秒的读写请求次数。
  • I/O 等待时间: 进程因等待 I/O 操作而花费的时间,此值越大,说明文件操作越频繁或设备越慢。

I/O 的两种核心方式

1. 缓存 I/O (Cached I/O)

缓存 I/O,又称为标准 I/O,是大多数文件系统默认的工作模式。其工作流程是,数据先从磁盘复制到内核空间的缓冲区(页缓存),然后再从内核空间缓冲区复制到应用程序的地址空间。

  • 读操作:操作系统会检查内核空间的页缓存中是否存在需要的数据。如果已缓存,则直接从缓存中返回数据;否则,系统会先从磁盘读取数据到内核缓冲区,然后再将数据从内核缓冲区复制到用户空间。
  • 写操作:应用程序将数据从用户空间复制到内核空间的缓冲区。此时,对于用户程序而言,写操作就已经完成了。至于何时将数据从内核空间真正写回磁盘,则由操作系统决定,除非用户显式调用 sync 同步命令。

优点

  • 在一定程度上分离了内核空间和用户空间,保证了系统本身的运行安全。
  • 通过缓存常用数据,可以显著减少实际的磁盘读取次数,从而提升性能。

缺点

  • 在缓存 I/O 机制中,数据无法直接在用户空间和磁盘之间传输。数据在传输过程中,需要在用户空间和内核空间(页缓存)之间进行多次数据拷贝,这会带来较大的 CPU 和内存开销。
2. 直接 I/O (Direct I/O)

直接 I/O 允许应用程序直接访问磁盘,从而绕过内核缓冲区,其主要目的是为了减少一次从内核缓冲区到用户进程地址空间的数据复制操作。像数据库管理系统(如 MySQL、Oracle)这类应用,它们更倾向于在用户空间实现自己的缓存机制,因此通常会选择使用直接 I/O。


第二部分:磁盘 I/O 性能监控与测试

iostat 命令详解

iostat 是一个强大的工具,用于报告 CPU 使用率磁盘 I/O 统计信息

1. 基本语法
iostat [选项] [间隔时间] [次数]
  • 间隔时间:每次报告之间的时间间隔(秒)。
  • 次数:报告输出的次数。若省略次数,则持续输出。
2. 常用选项
选项说明
-c仅显示 CPU 使用率统计
-d仅显示磁盘 I/O 统计
-x显示扩展的磁盘 I/O 统计(更详细)
-k以 KB/s 为单位显示数据(默认)
-m以 MB/s 为单位显示数据
-p DEVICE显示指定设备的统计(如 /dev/sda
-t在输出中增加时间戳
-y跳过首次统计(避免显示系统启动以来的平均值)
3. 输出字段解释
(1) CPU 统计 (iostat -c)
字段说明
%user用户进程占用 CPU 百分比
%nice低优先级(nice)进程占用 CPU 百分比
%system内核进程占用 CPU 百分比
%iowaitCPU 等待 I/O 的时间百分比(高则可能磁盘瓶颈)
%steal虚拟化环境下被其他虚拟机占用的 CPU 时间
%idleCPU 空闲时间百分比
(2) 磁盘 I/O 统计 (iostat -diostat -dkx)

基本磁盘统计 (iostat -d)

字段说明
Device磁盘设备名(如 sdanvme0n1
tps每秒传输次数(I/O 请求数)
kB_read/s每秒读取的数据量(KB/s)
kB_wrtn/s每秒写入的数据量(KB/s)
kB_dscd/s每秒丢弃的数据量(如 SSD 的 TRIM 操作)
kB_read自系统启动以来读取的总数据量(KB)
kB_wrtn自系统启动以来写入的总数据量(KB)

扩展磁盘统计 (iostat -dx)

字段说明
rrqm/s每秒合并的读请求数
wrqm/s每秒合并的写请求数
r/s每秒完成的读请求数
w/s每秒完成的写请求数
rkB/s每秒读取的数据量(KB/s)
wkB/s每秒写入的数据量(KB/s)
avgrq-sz平均每次 I/O 请求的数据大小(扇区数)
avgqu-sz平均 I/O 队列长度
await平均每次 I/O 请求的等待时间(ms,包括队列+处理时间)
r_await读请求的平均等待时间(ms)
w_await写请求的平均等待时间(ms)
svctm平均每次 I/O 请求的服务时间(ms,仅作参考)
%util设备利用率(0%~100%,接近 100% 表示磁盘饱和)

关于 awaitsvctmawait 可以理解为 I/O 请求的总响应时间,它包括了队列等待时间和实际的服务时间。如果 await 的值远大于 svctm,说明 I/O 请求在队列中等待的时间很长,这通常意味着磁盘 I/O 存在性能问题。

4. 使用示例
# 同时监控 CPU 和磁盘,每秒输出一次,共 5 次
iostat 1 5

# 仅监控磁盘 I/O,每 2 秒输出一次
iostat -d 2

# 以 MB/s 为单位显示磁盘吞吐量
iostat -d -m 1

# 监控指定磁盘(如 /dev/nvme0n1)
iostat -p nvme0n1 1 3

# 带时间戳输出,便于记录
iostat -t 1 3
5. 常见问题分析
  • 磁盘瓶颈
    • %util 接近 100%:磁盘 I/O 负载饱和。
    • await 较高(例如 >10ms):磁盘响应慢,可能是硬件性能不足或请求堆积。
    • avgqu-sz > 1:I/O 请求正在排队,可能存在瓶颈。
  • CPU 瓶颈 (I/O 相关)
    • %iowait 较高:CPU 大量时间在等待 I/O,根源是磁盘速度慢。
  • 与其他工具结合:可以使用 iotop 按进程查看磁盘 I/O 使用情况,或使用 vmstatsar 进行综合监控。
  • 注意事项iostat 的首次输出是系统启动以来的平均值,后续才是实时数据。可以使用 -y 选项跳过首次的平均值统计。

sysbench 性能测试工具

sysbench 是一个多功能的基准测试工具,可用于对 CPU、内存、磁盘和数据库进行压力测试。

1. CPU 测试

此测试用于评估 CPU 的计算能力。

# 计算 20000 以内的所有质数
sysbench cpu --cpu-max-prime=20000 run
  • 关键指标events per second (每秒事件数),越高越好。
2. 内存测试

此测试用于评估内存的读写速度。

sysbench memory --memory-block-size=1K --memory-total-size=10G run
  • 关键指标MiB/s (吞吐量)。
3. 磁盘 I/O 测试

这是一个三步过程:

步骤一:生成测试文件

sysbench fileio --file-total-size=1G prepare

步骤二:运行测试

# 运行随机读写测试
sysbench fileio --file-total-size=1G --file-test-mode=rndrw run
  • 关键指标read/write throughput (MB/s) (读/写吞吐量) 和 IOPS (每秒 I/O 操作数)。

步骤三:清理测试文件

sysbench fileio cleanup

一个更复杂的示例

# 准备测试文件
sysbench --num-threads=4 --max-time=60 --test=fileio --file-num=10 --file-total-size=10G --file-test-mode=rndrw prepare

# 同时使用 iostat 进行监控
iostat -dkx 1 300

第三部分:磁盘空间与分区使用情况

swapon:查看交换分区

Swap 分区通常被称为交换分区,它是一块特殊的硬盘空间。当系统物理内存不足时,操作系统会从内存中取出一部分暂时不用的数据放入交换分区,从而为当前运行的进程腾出内存空间。一般来说,swap 分区的容量建议是物理内存的 2 倍,但不超过 2GB。

swapon -s

df:查看文件系统使用情况

该命令用于查看文件系统的硬盘挂载点和空间使用情况。

# 以人类可读的格式显示
df -h

# 同时显示文件系统类型
df -Th

du:查看目录和文件大小

该命令用于统计目录或文件占用的磁盘空间大小。

  • -h: 以人类可读的格式显示。
  • -s: 仅显示总计大小。
  • -c: 显示几个目录或文件的磁盘空间大小,并统计它们的总和。
  • -a: 显示目录下的所有文件和目录的大小。
  • --max-depth=N: 指定显示目录的层级深度。

示例

# 显示当前所在目录的总大小
du -s

# 以人类可读格式显示 /home 目录的总大小
du -s -h /home

# 显示多个目录的大小并汇总
du -c /var/log /tmp

# 查看当前目录下一级子文件和子目录分别占用的磁盘容量
du -lh --max-depth=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2393292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能与机器学习从理论、技术与实践的多维对比

人工智能(Artificial Intelligence, AI)提出“让机器像人类一样思考”的目标,其核心理论围绕符号系统假设展开——认为智能行为可通过逻辑符号系统(如谓词逻辑、产生式规则)建模。 机器学习(Machine Learning, ML)是人工智能的子集,聚焦于通过数据自动改进算法性能的理…

什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程

什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程 摘要 WPF教程、WPF开发、.NET 8 WPF、Visual Studio 2022 WPF、WPF下载、WPF安装、WPF配置、WPF样式、WPF样式详解、XAML语法、XAML基础、MVVM架构、数据绑定、依赖属性、资源字典…

流程自动化引擎:让业务自己奔跑

在当今竞争激烈的商业环境中,企业面临着快速变化的市场需求、日益复杂的业务流程以及不断增长的运营成本。如何优化业务流程、提升效率并降低成本,成为企业持续发展的关键问题。 流程自动化引擎(Process Automation Engine)作为一…

AI炼丹日志-23 - MCP 自动操作 自动进行联网检索 扩展MCP能力

点一下关注吧!!!非常感谢!!持续更新!!! Java篇: MyBatis 更新完毕目前开始更新 Spring,一起深入浅出! 大数据篇 300: Hadoop&…

用 Python 模拟雪花飘落效果

用 Python 模拟雪花飘落效果 雪花轻轻飘落,给冬日带来一份浪漫与宁静。本文将带你用一份简单的 Python 脚本,手把手实现「雪花飘落效果」动画。文章深入浅出,零基础也能快速上手,完整代码仅需一个脚本文件即可运行。 目录 前言…

基于定制开发开源AI智能名片S2B2C商城小程序的大零售渗透策略研究

摘要:本文聚焦“一切皆零售”理念下的大零售渗透趋势,提出以定制开发开源AI智能名片S2B2C商城小程序为核心工具的渗透策略。通过分析该小程序在需求感应、场景融合、数据驱动等方面的技术优势,结合零售渗透率提升的关键路径,揭示其…

XPlifeapp:高效打印,便捷生活

在数字化时代,虽然电子设备的使用越来越普遍,但打印的需求依然存在。无论是学生需要打印课表、资料,还是职场人士需要打印名片、报告,一个高效便捷的打印软件都能大大提高工作效率。XPlifeapp就是这样一款超级好用的手机打印软件&…

等保测评-Mysql数据库测评篇

Mysql数据库测评 0x01 前言 "没有网络安全、就没有国家安全" 等保测评是什么? 等保测评(网络安全等级保护测评)是根据中国《网络安全法》及相关标准,对信息系统安全防护能力进行检测评估的法定流程。其核心依据《信…

02.K8S核心概念

服务的分类 有状态服务:会对本地环境产生依赖,例如需要把数据存储到本地磁盘,如mysql、redis; 无状态服务:不会对本地环境产生任何依赖,例如不会存储数据到本地磁盘,如nginx、apache&#xff…

一篇文章玩转CAP原理

CAP 原理是分布式系统设计的核心理论之一,揭示了系统设计中的 根本性权衡。 一、CAP 的定义 CAP 由三个核心属性组成,任何分布式系统最多只能同时满足其中两个: 一致性(Consistency) 所有节点在同一时刻看到的数据完全…

Vue-收集表单信息

收集表单信息 Input label for 和 input id 关联, 点击账号标签 也能聚焦 input 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>表单数据</title><!-- 引入Vue --><scrip…

vscode开发stm32,main.c文件中出现很多报错影响开发解决日志

本质上为 .vscode/c_cpp_properties.json文件和Makefile文件中冲突&#xff0c;两者没有同步。 将makefile文件中的内容同步过来即可&#xff0c;下面给出一个json文件的模板&#xff0c;每个人的情况不同&#xff0c;针对性修改即可 {"configurations": [{"na…

嵌入式鸿蒙系统中水平和垂直以及图片调用方法

利用openharmony操作的具体现象: 第一:Column 作用:沿垂直方向布局的容器。 第二:常用接口 Column(value?: {space?: string | number}) 参数: 参数名参数类型必填参数描述spacestring | number否纵向布局元素垂直方向间距。 从API version 9开始,space为负数或者ju…

【海康USB相机被HALCON助手连接过后,MVS显示无法连接故障。】

在Halcon里使用助手调用海康USB相机时&#xff0c;如果这个界面点击了【是】 那么恭喜你&#xff0c;相机只能被HALCON调用使用&#xff0c;使用MVS或者海康开发库&#xff0c;将查找不到相机 解决方式&#xff1a; 右键桌面【此电脑】图标 ->选择【管理】 ->选择【设备…

2025年电气工程与轨道交通国际会议:绿色能源与智能交通的创新之路

2025年电气工程与轨道交通国际会议&#xff08;ICEERT 2025&#xff09;是一场电气工程与轨道交通领域的国际盛会&#xff0c;将于2025年在武汉隆重召开。此次会议汇聚了全球顶尖的专家学者和行业精英&#xff0c;共同探讨电气工程与轨道交通的最新研究成果和技术趋势。会议将围…

WPF log4net用法

WPF log4net用法 一、在工程中管理NuGet程序包&#xff0c;找到log4net&#xff0c;点击安装&#xff0c;如下图已成功安装&#xff1b; 二、在工程中右键添加新建项&#xff0c;选择应用程序配置文件&#xff08;后缀为.config&#xff09;,然后设置名称&#xff0c;这里设置…

数字孪生数据监控如何提升汽车零部件工厂产品质量

一、汽车零部件工厂的质量挑战 汽车零部件作为汽车制造的基础&#xff0c;其质量直接关系到整车的性能、可靠性和安全性。在传统的汽车零部件生产过程中&#xff0c;质量问题往往难以在早期阶段被发现和解决&#xff0c;导致生产效率低下、生产成本上升&#xff0c;甚至影响到…

贪心算法实战3

文章目录 前言区间问题跳跃游戏跳跃游戏II用最少数量的箭引爆气球无重叠区间划分字母区间合并区间 最大子序和加油站监控二叉树 前言 今天继续带大家进行贪心算法的实战篇3&#xff0c;本章注意来解答一些运用贪心算法的比较难的问题&#xff0c;大家好好体会&#xff0c;怎么…

实测,大模型谁更懂数据可视化?

大家好&#xff0c;我是 Ai 学习的老章 看论文时&#xff0c;经常看到漂亮的图表&#xff0c;很多不知道是用什么工具绘制的&#xff0c;或者很想复刻类似图表。 实测&#xff0c;大模型 LaTeX 公式识别&#xff0c;出乎预料 前文&#xff0c;我用 Kimi、Qwen-3-235B-A22B、…

Linux入门(十一)进程管理

Linux 中每个执行的程序都称为一个进程&#xff0c;每个进程都分配一个ID号&#xff08;PID&#xff09; 每个进程都可能以两种方式存在&#xff0c;前台&#xff08;屏幕上可以操作的&#xff09;和后台&#xff08;屏幕上无法看到的&#xff09;&#xff0c;一般系统的服务都…