Mac怎么查看哪些文件占用了磁盘IO 苹果性能监测

陌晨吖_5057

陌晨吖_5057

2026-05-01

552人浏览

原创

磁盘i/o卡顿表现为系统响应迟滞、命令执行卡顿、进程状态为d、iostat中await高及%util接近100%,主因包括硬件故障、系统配置不当、应用层压力及资源过载。

mac怎么查看哪些文件占用了磁盘io 苹果性能监测

如果您在使用Mac时发现系统响应迟滞、风扇持续高转或磁盘指示灯频繁闪烁,则可能是某些文件或进程正在引发高强度磁盘I/O行为。活动监视器无法直接显示“哪些文件”被读写,但可通过识别高I/O进程并结合其访问路径、打开文件列表与实时行为模式,定位实际占用磁盘IO的文件来源。以下是实现该目标的多种可行方法:

一、使用活动监视器定位高磁盘I/O进程

该方法基于系统原生工具,通过排序与动态观测识别当前消耗最多磁盘带宽的进程,是快速锁定问题源头的第一步。活动监视器虽不显示具体文件路径,但可提供进程名、PID、实时读写速率及累计I/O量,为后续深入分析提供关键线索。

1、按Command + Space打开聚焦搜索,输入活动监视器并回车启动;

2、点击顶部标签栏中的磁盘;

3、右键表头区域 → 勾选读取字节/秒和写入字节/秒(若未默认显示);

4、点击写入字节/秒列标题进行降序排列,观察顶部进程;

5、对疑似目标进程(如mdworker、backupd、GoogleSoftwareUpdate、Docker Desktop),右键选择在Finder中显示,确认其可执行文件位置与签名有效性。

二、通过lsof命令查看进程打开的文件列表

该方法利用终端指令获取指定进程当前打开的所有文件句柄,包括正在读写的普通文件、日志、缓存数据库及内存映射文件,是将高I/O进程与具体文件建立直接关联的核心手段。需配合活动监视器中获取的PID使用。

1、在活动监视器“磁盘”页记下目标进程的PID(进程ID);

2、打开终端应用,输入命令:lsof -p [PID] | grep -E 'REG|DIR'(将[PID]替换为实际数字);

3、观察输出中TYPE列为REG(常规文件)且SIZE或OFFSET持续增长的条目,这些即为当前被高频读写的活跃文件;

4、重点关注路径含Library/Caches、Logs、Containers、.git、node_modules、~/Downloads等高I/O风险目录的文件行。

三、使用fs_usage实时追踪指定进程的文件系统调用

该方法提供纳秒级精度的实时文件操作流,可精确捕获每一次open、read、write、close系统调用及其对应文件路径、字节数与耗时,适用于需要确认某进程是否正对特定大文件执行顺序读取或随机写入的场景。

1、在终端中执行:sudo fs_usage -f filesys -w -t -p [PID](需输入管理员密码);

14种水彩水果PSD素材
14种水彩水果PSD素材

PSD格式,含JPG预览图。

下载

2、等待约5–10秒,观察输出中write_nocancel、read_nocancel、pwrite_nocancel等I/O类调用行;

3、每行末尾显示的路径即为当前被操作的文件,例如/Users/xxx/Library/Application Support/Code/Cache/xxxx;

4、按Control+C中断追踪,避免长时间运行影响系统性能。

四、借助dtrace脚本识别高延迟单次I/O操作涉及的文件

该方法针对“磁盘卡顿感明显但平均吞吐不高”的典型症状,通过检测单次I/O延迟超过阈值(如100ms)的操作,定位引发界面冻结或应用无响应的具体文件。需启用开发者模式并安装Xcode命令行工具。

1、确保已安装Xcode命令行工具:xcode-select --install;

2、执行以下dtrace脚本(复制粘贴至终端):sudo dtrace -n 'syscall::write:entry,syscall::read:entry { self->start = timestamp; self->fd = arg0; } syscall::write:return,syscall::read:return /self->start/ { @latency = avg(timestamp - self->start); @file = quantize(arg1); printf("FD %d, latency %d ns\n", self->fd, timestamp - self->start); self->start = 0; }';

3、运行期间触发疑似卡顿操作(如打开大型PDF、导入视频项目);

4、观察输出中latency值持续高于100000000(100ms)的记录,结合后续lsof -F f -p [PID]匹配文件描述符(FD)与路径。

五、检查Time Machine本地快照与APFS快照占用

该方法用于排除系统级自动机制导致的隐性高I/O,特别是当用户未主动执行备份但仍观察到backupd或mds进程持续高写入时。本地快照虽不显示为普通文件,但其创建、合并与清理过程会引发大量元数据更新与块复制操作。

1、在终端中运行:tmutil listlocalsnapshots /,查看是否存在大量时间密集型快照;

2、执行:diskutil apfs listSnapshots "Macintosh HD"(请将卷名替换为实际名称),确认快照数量与大小;

3、若快照数异常多(如>20个)且最近创建时间密集,可临时禁用本地快照以验证影响:sudo tmutil disablelocal;

4、观察活动监视器中backupd与mds进程的写入字节/秒是否显著回落,若回落则说明快照维护是主要I/O来源。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

3169

3

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2023.07.25

2308

9

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

2023.08.02

1240

5

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.09

1198

4

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

2023.09.05

1356

5

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2023.09.20

2158

7

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

2023.09.20

3460

8

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

2023.09.22

15735

6

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

549

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
swift开发文档
swift开发文档

共33课时 | 43.5万人学习

Mac PHP开发工具与环境搭建
Mac PHP开发工具与环境搭建

共8课时 | 2.1万人学习

极客学院Swift语言视频教程
极客学院Swift语言视频教程

共40课时 | 14.9万人学习