Skip to content

pt-ioprofile

监视进程 IO 并打印文件与 I/O 活动表。

警告

pt-ioprofile 会冻结(挂起)服务器,可能导致进程崩溃、分离后性能变差,或使进程停留在休眠状态! 它属于侵入式工具,除非理解并接受这些风险,否则不要在生产服务器上使用。

语法

bash
pt-ioprofile [OPTIONS] [FILE]

做两件事:1)用 lsof+strace 采样 -s 秒;2)聚合结果。指定 FILE 时跳过第 1 步。

默认监视 mysqld 进程 30 秒,输出类似:

Tue Dec 27 15:33:57 PST 2011
Tracing process ID 1833
  total       read      write      lseek  ftruncate filename
  0.000150   0.000029   0.000068   0.000038   0.000015 /tmp/ibBE5opS

通常需要以 root 运行。

用法示例

pt-ioprofile 是纯本机工具,通过 strace 附加到进程做 I/O 采样,不连接数据库。命令可直接复制运行。它是侵入式工具(见上方警告,会冻结目标进程),务必确认可接受后再用。

场景:默认剖析 mysqld 30 秒

怀疑 mysqld 在做大量磁盘 I/O 时,用默认配置抓 30 秒,看哪些文件读写最频繁:

bash
pt-ioprofile

场景:指定进程与剖析时长

要剖析其他进程(或缩短/延长时长),用 -b 指定进程名、--run-time 指定秒数:

bash
pt-ioprofile -b mysqld --run-time 60

场景:剖析指定 PID

已知目标 PID(如 1833)时,用 -p 直接指定,覆盖默认的 --profile-process

bash
pt-ioprofile -p 1833

场景:按 I/O 大小统计各文件

想看每个文件读写了多少字节、取平均值,用 -c sizes-a avg-g filename 组合:

bash
pt-ioprofile -c sizes -a avg -g filename

功能说明

pt-ioprofile 通过 ptrace() 将 strace 附加到进程来监视其 IO,进程会因此变得很慢, 直到 strace 分离。除了冻结服务器,还存在进程崩溃、分离后性能变差、 或 strace 未能干净分离而使进程停留在休眠状态的风险。 因此应视其为侵入式工具,除非能接受上述风险,否则不要在生产服务器上使用。

选项

选项说明
-a, --aggregate类型:string;默认:sum。聚合函数:sum(单元格取和)或 avg(取平均)
-c, --cell类型:string;默认:times。单元格内容:count(I/O 操作次数)、sizes(I/O 操作大小)、times(I/O 操作耗时)
-g, --group-by类型:string;默认:filename。分组项:all(汇总为一行)、filename(每个文件一行)、pid(每个进程 ID 一行)
--help显示帮助并退出
-p, --profile-pid类型:int。要剖析的 PID,优先于 --profile-process
-b, --profile-process类型:string;默认:mysqld。要剖析的进程名
--run-time类型:int;默认:30。剖析时长(秒)
--save-samples类型:string。保存样本的文件名,可用于后续分析
--version显示版本并退出

其他信息

  • 系统要求:需要 Bourne shell(/bin/sh)。

  • 环境变量:本工具不使用环境变量(所有 Percona Toolkit 工具均支持 PTDEBUG=1 调试,注意调试输出会暴露命令行中的密码)

  • 通用说明:已知问题的反馈方式、PTDEBUG 调试安全提示、系统要求基线,见 通用说明

更多细节请阅读 官方文档

Percona Toolkit 中文文档 · 社区维护的第三方学习站