pt-ioprofile
监视进程 IO 并打印文件与 I/O 活动表。
警告
pt-ioprofile 会冻结(挂起)服务器,可能导致进程崩溃、分离后性能变差,或使进程停留在休眠状态! 它属于侵入式工具,除非理解并接受这些风险,否则不要在生产服务器上使用。
语法
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 秒,看哪些文件读写最频繁:
pt-ioprofile场景:指定进程与剖析时长
要剖析其他进程(或缩短/延长时长),用 -b 指定进程名、--run-time 指定秒数:
pt-ioprofile -b mysqld --run-time 60场景:剖析指定 PID
已知目标 PID(如 1833)时,用 -p 直接指定,覆盖默认的 --profile-process:
pt-ioprofile -p 1833场景:按 I/O 大小统计各文件
想看每个文件读写了多少字节、取平均值,用 -c sizes、-a avg、-g filename 组合:
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 调试安全提示、系统要求基线,见 通用说明。
更多细节请阅读 官方文档。