资讯专栏INFORMATION COLUMN

Mysql使用perf top判断cpu高原因

IT那活儿 / 2480人阅读
Mysql使用perf top判断cpu高原因

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!



Perf介绍
我们在mysql数据库时,经常会遇到主机cpu使用率突增的现象,碰到紧急情况需要尽快找到原因进行处理,这里我推荐使用Perf top。
Perf 是内置于Linux 内核源码树中的性能剖析工具:
它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。可用于性能瓶颈的查找与热点代码的定位。

linux2.6及后续版本都自带该工具,几乎能够处理所有与性能相关的事件。perf top 是比较常用于展示占用CPU始终最多的函数或者指令,一般以此来查找热点函数。



指标介绍

# perf top

  • -g:可以查看堆栈调用;
  • -a:查看所有CPU。
例:
  • Samples : 采样数, perf 总共采集了 876 个 CPU 时钟事件。
  • event : 事件类型。
  • Event count (approx.) : 事件总数量。

行列:

  • Overhead: 是该符号的性能事件在所有采样中的比例,用百分比来表示。

  • Shared: Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。

  • Object: Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。

  • Symbol: Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。

上面结果显示内核模块中_raw_spin_unlock_irqrestore占用 CPU时钟最多,比列占11.31%。



根据MYSQL进程查找CPU消耗过高的线程信息
1. 找到mysql进程id:
ps -ef |grep mysqld|grep -v grep
例:
[root@gaussdb11 ~]# ps -ef |grep mysqld|grep -v grep
mysql 12816      1  0 08:47 ? 00:00:00 /bin/sh 
/home/mysql/bin/mysqld_safe --defaults-
file=/home/mysql_data/db/mysqldb1.cnf --ledir=/home/mysql/bin
mysql 14206  12816  0 08:47 ? 00:00:36 
/home/mysql/bin/mysqld --defaults-file=/home/mysql_data/db/mysqldb1.cnf --basedir=/home/mysql
--datadir=/home/mysql_data/db/data --plugin-dir=/home/mysql/lib/plugin --log-
error=/home/mysql_data/db/log/mysql.err --pid-file=/home/mysql_data/db/mysql.pid --
socket=/home/mysql_data/db/mysql.sock --port=3306
2. 根据进程id查找MYSQL的调用函数信息及进程的线程信息:
perf top -g -p pid
top -H -p pid
  • -H 显示线程信息;
  • -p指定pid。
14206就是mysql进程,我们以这个进程为例:
Children,Self表示函数本身的overhead:如果某个函数的overhead占60%,那么它的Self overhead就是40%。一个是调用 main() 上,一个是执行 main() 指令,二者的overhead都要计算入main的Children overhead。Self函数所占非常低,说明函数都在被正常调用。
[root@gaussdb11 ~]# top -H -p 14206
top - 15:11:14 up  6:25, 3 users, load average: 0.00, 0.03, 0.05
Threads: 42 total, 0 running, 42 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3765236 total, 2696380 free, 566248 used, 502608 buff/cache
KiB Swap: 3145724 total, 3145724 free, 0 used. 2624428 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
14206 mysql     20   0 3345492 414464  11640 S  0.0 11.0   0:03.13 mysqld
14207 mysql     20   0 3345492 414464  11640 S  0.0 11.0   0:00.00 mysqld
14216 mysql     20   0 3345492 414464  11640 S  0.0 11.0   0:00.41 mysqld
14217 mysql     20   0 3345492 414464  11640 S  0.0 11.0   0:00.49 mysqld
14218 mysql     20   0 3345492 414464  11640 S  0.0 11.0   0:00.39 mysqld
14219 mysql     20   0 3345492 414464  11640 S  0.0 11.0   0:00.39 mysqld
14220 mysql     20   0 3345492 414464  11640 S  0.0 11.0   0:00.37 mysqld
3. 根据上一步查出来的线程pid可以查看该线程详细信息:
select CONCAT(kill ,id,;) AS KillSQL,USER,HOST,DB,COMMAND,TIME,STATE,INFO from 
information_schema.PROCESSLIST where ID = (
select PROCESSLIST_ID from  performance_schema.threads where 
THREAD_OS_ID=14207);
4. 根据查出来的信息,查看sql执行计划,如果是高耗SQL,与应用确认后予以kill,然后进行在进行sql优化。


END




本文作者:汤 杰(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129444.html

相关文章

  • 记一次PHP并发性能调优实战 -- 性能提升104%

    摘要:这是多处理器系统中,调度器用来分散任务到不同的机制,通常也被称为处理器间中断,。文章编写计划 待完成: 详细介绍用到的各个工具 作者: 万千钧(祝星) 适合阅读人群 文中的调优思路无论是php, java, 还是其他任何语言都是用. 如果你有php使用经验, 那肯定就更好了 业务背景 框架及相应环境 laravel5.7, mysql5.7, redis5, nginx1.15 cento...

    番茄西红柿 评论0 收藏0
  • 记一次PHP并发性能调优实战 -- 性能提升104%

    摘要:这是多处理器系统中,调度器用来分散任务到不同的机制,通常也被称为处理器间中断,。文章编写计划 待完成: 详细介绍用到的各个工具 作者: 万千钧(祝星) 适合阅读人群 文中的调优思路无论是php, java, 还是其他任何语言都是用. 如果你有php使用经验, 那肯定就更好了 业务背景 框架及相应环境 laravel5.7, mysql5.7, redis5, nginx1.15 cento...

    xeblog 评论0 收藏0
  • Perf分析CPU性能问题笔记

    摘要:本文仅仅是一个笔记。因此同样可以用观察,但是会出现无法显示函数符号的问题,注意观察最下面一行解决办法是先用记录采样数据,然后将容器内文件系统绑定到上,然后用指定符号目录。观察容器内进程使用情况目前没有办法。 本文仅仅是一个笔记。 场景 观察进程的CPU使用情况 观察进程内各个函数的CPU使用情况: sudo perf top -p 同时显示函数调用链: sudo perf top -...

    paulquei 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<