pt-pmp 是一个非常简单的工具,可以用来获取MySQL的堆栈信息。
工具首先获取运行过程中的mysqld堆栈信息,
然后将相似的线程进行汇总排序,根据调用频繁程度从高到低打印出来。

查看pt-pmp的源代码,我们可以发现pt-pmp本身是一个shell脚本,底层调用的是gdb,所以我们需要事先安装gdp。

yum -y install gdb

在pt-pmp的运行过程过程中,他会短暂的冻结mysqld的主程序,导致MySQL无法响应,
同时当gdb detach的时候,MySQL存在crash的风险。因此如果在一个很繁忙的生产环境中需要谨慎使用。
但是如果你的MySQL数据库现在已经停止响应了,那么可以使用pt-pmp去跟踪MySQL的堆栈信息,来分析他为什么hang住。

如下是我用sysbench压测的时候发现开启pt-pmp之后,MySQL在第203秒和204秒的tps为0,所以生产环境使用一定要谨慎!

pt-pmp --iterations 1 --interval 1 --lines 3
--save-samples

Fri Nov 23 13:42:04 CST 2018
18 __io_getevents_0_4(libaio.so.1),LinuxAIOHandler::collect(os0file.cc:2500),LinuxAIOHandler::poll(os0file.cc:2646)
8 pthread_cond_wait,native_cond_wait(thr_cond.h:140),my_cond_wait(thr_cond.h:140)
6 pthread_cond_wait,wait(os0event.cc:165),os_event::wait_low(os0event.cc:165)
6 pthread_cond_timedwait,os_event::timed_wait(os0event.cc:285),os_event::wait_time_low(os0event.cc:412)
1 sigwait(libpthread.so.0),signal_hand(mysqld.cc:2101),pfs_spawn_thread(pfs.cc:2190)
1 sigwaitinfo(libc.so.6),timer_notify_thread_func(posix_timers.c:77),pfs_spawn_thread(pfs.cc:2190)
1 poll(libc.so.6),Mysqld_socket_listener::listen_for_connection_event(socket_connection.cc:852),connection_event_loop(connection_acceptor.h:66)
1 nanosleep(libpthread.so.0),os_thread_sleep(os0thread.cc:279),srv_master_sleep(srv0srv.cc:2330)
1 __lll_lock_wait(libpthread.so.0),_L_lock_812(libpthread.so.0),pthread_mutex_lock(libpthread.so.0)
1 fsync(libpthread.so.0),os_file_fsync_posix(os0file.cc:3053),os_file_flush_func(os0file.cc:3053)

[ 10s] threads: 8, tps: 136.72, reads/s: 1925.27, writes/s: 550.08, response time: 251.43ms (99%)
[ 21s] threads: 8, tps: 79.34, reads/s: 1110.72, writes/s: 317.35, response time: 415.50ms (99%)
[ 30s] threads: 8, tps: 76.82, reads/s: 1075.46, writes/s: 306.50, response time: 2996.23ms (99%)
[ 40s] threads: 8, tps: 67.40, reads/s: 943.56, writes/s: 270.29, response time: 5914.77ms (99%)
[ 50s] threads: 8, tps: 103.60, reads/s: 1450.34, writes/s: 414.38, response time: 244.90ms (99%)
[ 60s] threads: 8, tps: 118.90, reads/s: 1664.62, writes/s: 475.61, response time: 138.50ms (99%)

打印堆栈,对系统有很大影响,慎用!!!

2、参数说明
--binary

short form: -b; type: string; default: mysqld
Which binary to trace.
指定哪个进行进行跟踪,如果不指定,他默认去寻找mysqld进程。因此pt-pmp也可以跟踪其他进程。

--help

Show help and exit.
打印帮助信息

--interval

short form: -s; type: int; default: 0
Number of seconds to sleep between --iterations.
每次跟踪的间隔时间,默认为不休眠

--iterations

short form: -i; type: int; default: 1
How many traces to gather and aggregate.
总共的跟踪次数,默认为跟踪1次

--lines

short form: -l; type: int; default: 0
Aggregate only first specified number of many functions; 0=infinity.
pt-pmp在第二步聚合的时候只打印相应分类的几个方法,默认会全部打印出来,你可以让他只打印前面2个

--pid

short form: -p; type: int
Process ID of the process to trace; overrides --binary.
指定哪个进程号进行跟踪,这个参数会覆盖--binary指定的参数值,因此指定pid和binary其中一个即可

--save-samples

short form: -k; type: string
Keep the raw traces in this file after aggregation.
将跟踪结果保存到文本文件中

--version

Show version and exit.
输出版本信息

18. pt-pmp的更多相关文章

  1. 【java基础】面向对象的三大基本特征之-------继承

    面向对象的三大特征:封装,继承,多态 java通过extends关键字来实现继承,而且是单继承,一个子类只可以有一个直接父类,但是父类还可以有父类... java.long.Object是所有类的父类 ...

  2. hdu4757 可持续字典树

    Tree Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total Sub ...

  3. Python内存管理机制-《源码解析》

    Python内存管理机制 Python 内存管理分层架构 /* An object allocator for Python. Here is an introduction to the layer ...

  4. 第18章 图元文件_18.2 增强型图元文件(emf)(2)

    18.2.7 增强型图元文件的查看和打印程序 (1)传递EMF到剪贴板,剪贴板类型应为:CF_ENHMETAFILE (2)CopyEnhMetaFile用于复制图元文件 (3)剪贴板中的图元文件会自 ...

  5. 荣耀6 Plus 的屏幕大小pt计算方法

    使用 gomobile 检测 华为荣耀 6 Plus 的屏幕大小为:  1080*1776 px ;   162pt*266.40pt ;  每pt像素个数:6.666665个. 而实际的数据是: 主 ...

  6. PT与PX,em(%)区别

    字体大小的设置单位,常用的有2种:px.pt.这两个有什么区别呢?先搞清基本概念:px就是表示pixel,像素,是屏幕上显示数据的最基本的点:pt就是point,是印刷行业常用单位,等于1/72英寸. ...

  7. 终于通过了PMP考试,然这只是一个开始。。。

    三个月的辛苦付出,从2015/06/18(本人的生日)开始接受培训,2015/10/6终于收到了PMI发过来的祝贺的邮箱,但是成绩不是很理想.只得了两个B,三个M.但是目标已实现,心情回落. 在这三个 ...

  8. pt工具主从一致性检查并修复以及版本3.0.4的版本缺点

    pt-table-checksum和pt-table-sync分别检验master-slave的数据不一致并修复. 1.本次测试环境 [root@172-16-3-190 we_ops_admin]# ...

  9. pt和px区别 pt是逻辑像素,px是物理像素

    pt和px区别 pt是逻辑像素,px是物理像素字体大小的设置单位,常用的有2种:px.pt.这两个有什么区别呢?先搞清基本概念:px就是表示pixel,像素,是屏幕上显示数据的最基本的点:pt就是po ...

  10. PMP学习总结(1) -- 引论

    3月18日考试,1个月后出的成绩,当我拿到Pass的结果的时候还是蛮开心的,因为在备考期间,公司项目十分紧急,经常加班到晚上9,10点,而且宝贝女儿也在这个期间出生,所以备考是十分辛苦的,经常晚上11 ...

随机推荐

  1. 关于tpg例程的仿真

    关于tpg例程的仿真 processor system reset---rst_clk_wiz_0_148M 可以看出interconnect_aresetn和peripheral_aresetn的复 ...

  2. kafka partition(分区)与 group(转)

    原文  https://www.cnblogs.com/liuwei6/p/6900686.html 一. 1.原理图 2.原理描述 一个topic 可以配置几个partition,produce发送 ...

  3. 静态初始化块和main方法哪个先被执行?

    直接看代码 public class BlockAndMain { public static void main(String[] args) { System.out.println(" ...

  4. 知识点:Mysql 基本用法之存储过程

    存储过程 一. 介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 使用存储过程的优点: 用于替代程序写的SQL语句,实现程序与sql ...

  5. linux服务之apache(二)

    1.ip/pv/uv(用来统计网站被访问情况) ip:表示该网站一天被多少ip访问过,一天一个ip之算做一次. pv:表示页面被访问的次数 uv:独立访客,一个用户就是一个uv. 2.创建虚拟主机 利 ...

  6. tkinter 写一个简易的ide

    简易IDE 基于tkinter的简易ide,参考文档和Baidu的资料制作的,过程中遇到了很多问题,也学到了很多知识. 功能: 1.菜单栏 2.编辑功能 open save... 3.快捷键  ctr ...

  7. nginx 返回数据不完整

    当nginx 代理解析大量数据流时,会把数据先放在自己的缓冲区,然后一并发给客户端 一次请求的数据量很大, 则会有一部分数据会被忽略掉 前端解析数据会有问题 致使页面白屏 nginx 返回数据不完整的 ...

  8. leetcode1030

    class Solution(object): def __init__(self): self.List = list() def bfs(self,R,C,S,V): T = list() whi ...

  9. es6入门set和map

    ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. var set = new Set([1, ...

  10. 教女朋友写第一个php

    1 首先 下载xampp 软件.按默认安装好之后 在电脑的右下角的箭头里能发现一个橘色的小图标 双击它 启动阿帕奇和mysql 会变绿 2 打开 C:\xampp\apache 文件夹 找到httpd ...