pt-pmp执行两项任务:获取堆栈信息,并总结堆栈信息。如果在命令行上给出一个文件,该工具将跳过第一步,只聚合文件。
为了总结堆栈跟踪,该工具从堆栈的每一层提取函数名(符号),并将它们与逗号组合起来。它对输出中的每个线程都这样做。然后,它将相似的线程排序在一起,并计算每个线程的数量,根据调用频繁程度从高到低打印出来。
pt-pmp是一个只读工具。但是,收集GDB堆栈跟踪是通过将GDB附加到程序并从所有线程打印堆栈跟踪来实现的。这将在一段时间内冻结程序,一秒钟左右或更多 (在程序中有很多内存和线程的非常繁忙的系统会消耗更长时间 ) 。在该工具作为MySQL分析工具的默认使用中,这意味着当该工具运行时MySQL将无响应,但是如果你的MySQL数据库现在已经停止响应了,那么可以使用pt-pmp去跟踪MySQL的堆栈信息,来分析他为什么hang住。 除了冻结服务器之外,还存在一些服务器崩溃的风险,或者在GDB从服务器分离之后性能很差。
查看pt-pmp的源代码,我们可以发现pt-pmp本身是一个shell脚本,底层调用的是gdb,所以我们需要事先安装gdp。
参数说明:
- -binary
指定哪个进程进行跟踪,如果不指定,他默认去寻找mysqld进程。因此pt-pmp也可以跟踪其他进程。
- -help
帮助并退出
- -interval
每次跟踪的间隔时间,默认为0
- -iterations
总共的跟踪次数,默认为跟踪1次
- -lines