您的位置:首页 > 数据库 > MySQL

MySQL 常用运维工具之内核和代码分析

2018-02-10 00:02 435 查看
之前说过一些运维工具,主要都是利用MySQL或者Linux的命令,输出各项指标,但是还有个地方也很重要,就是如何跟踪MySQL进程,知道它在处理什么事情,这里不仅仅需要输出它当前在处理拿一个请求,还要知道它是在处理日志呢?还是在处理缓存呢?这些东西需要用到我们这几个工具来处理。先从最基础的介绍做起。然后做个简单的例子

pstack:用来跟踪内存堆栈,打印MySQL实例各个线程正在处理那些函数。Linux下有时候我们需要知道一个进程在做什么,比如说程序不正常的时候,他到底在干吗?最直接的方法就是打印出他所有线程的调用栈,这样我们从栈再配合程序代码就知道程序在干吗了。

这个命令在排查进程问题时非常有用,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在;可以在一段时间内,多执行几次pstack,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方。

pstack



perf:个人觉得这个是在所有工具中最有用的一种,IBM甚至称它为倚天剑,它用来显示服务器的各种性能热点,包括硬件级、系统级、应用级的。具体用法如下:

https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/index.html

最常用的情况就是通过perf top -p pid来打印MySQL实例当前在处理什么。

perf top -p





pt-stalk:这个是用来处理短时间,或者无人值守时间的服务器波动,例如晚上12点,服务器出现了两分钟的性能波动,连接数超过了1000,部分查询要很长时间,但这个是概率事件。咋办,难道DBA每天晚上12点去盯着收集数据么?pt-stalk实现的功能,就是当你定义项,超过你定义的阀值,自动的使用指定的方法,把对应的数据收集起来。

以上面的例子,运行下列命令,当pt-stalk通过status命令,获得Threads_connected的值超过了阀值1000,那么它就使用collect-tcpdump参数,将全部连接的内容用tcpdump输出到日志。

pt-stalk –collect-tcpdump –function status \

–variable Threads_connected –threshold 1000 \

–daemonize – –user=root –password=YOURPASSWORD

具体说明:https://www.percona.com/doc/percona-toolkit/LATEST/pt-stalk.html

tcprstat : 以往有人汇报,说数据库连接很慢,我们都会通过用客户端连接一次,亲自体验下什么速度。但是这种方法其实很片面,tcprstat用来统计服务器时延统计工具,便于从内核协议栈层面分析系统潜在异常,在原有功能基础上,增加时延阈值统计,记录超过阈值的包个数,并把数据包时间戳记录到日志文件,这样可以根据时间戳快速定位到抓包文件中对应的包,从而可以快速定位到大时延包,避免了人肉搜索抓包文件,提高问题排查效率,所有参数可配置。可以以在线方式和离线方式分析redis、memcached、mysql、nginx等请求应答系统的时延,并定位慢响应数据报文。

具体说明:https://github.com/y123456yz/tcprstat
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: