DBA如何利用strace/pstack/gdb来定位问题

参考:https://database.51cto.com/art/202006/617923.htm

strace简介

strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用。

Strace是一个简单的跟踪系统调用执行的工具。在其最简单的形式中,它可以从开始到结束跟踪二进制的执行,并在进程的生命周期中输出一行具有系统调用名称,每个系统调用的参数和返回值的文本行。

常用选项

  •  -T:strace输出显示时间
  •  -t:可以在每行的输出之前添加时间戳,-tt可以精确到微妙级别,-ttt也可以精确到微妙级,但是它并不是打印当前时间,而是显示自从epoch以来的所经过的秒数
  •  -s:指定输出的字符串的最大长度,默认为32,如果输出到文件的话会全部输出
  •  -o:指定将strace输出到文件
  •  -ff:如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
  •  -e:指定跟踪某个行为,例如-e trace=open指定只跟踪open行为
  •  -y:将文件句柄用文件路径代替显示

正确姿势

简单使用

  1. strace -T -tt -o /tmp/strace.log CMD  
  2. strace -T -tt CMD 2>&1 |tee /tmp/strace.log  
  3. strace -T -tt -s 100 -o /tmp/strace.log CMD  
  4. strace -T -tt -s 100 -ff -o /tmp/strace.log CMD  
  5. strace -T -tt -s 100 -e trace=XXXX -o /tmp/strace.log CMD 

使用案例

利用strace观察客户端client执行SQL

通过sys.processlist表中pid可以知道客户端连接pid  

mysql> select  thd_id,conn_id,user,pid,command,current_statement,program_name from  sys.processlist  where conn_id>0 and  pid >0;
+--------+---------+----------------+--------+---------+-------------------------------------------------------------------+--------------+
| thd_id | conn_id | user           | pid    | command | current_statement                                                 | program_name |
+--------+---------+----------------+--------+---------+-------------------------------------------------------------------+--------------+
| 218265 |  218238 | root@localhost | 103440 | Query   | select  thd_id,conn_id,user,pi ... t  where conn_id>0 and  pid >0 | mysql        |
+--------+---------+----------------+--------+---------+-------------------------------------------------------------------+--------------+
1 row in set (0.33 sec)
#session1
[root@localhost scripts]# strace -T -tt -s 100 -o /tmp/strace.log -p103440
strace: Process 103440 attached

#session2
mysql> use test
Database changed
mysql> select *from t1 limit 2;
+----+--------------------------------------+
| id | name                                 |
+----+--------------------------------------+
|  1 | 137b97ba-6de1-11eb-91cf-000c29a5b3f5 |
|  2 | 13d6586d-6de1-11eb-91cf-000c29a5b3f5 |
+----+--------------------------------------+
2 rows in set (0.00 sec)

查看strace文件

[root@localhost tmp]# vi /tmp/strace.log

11:37:35.114324 write(1, "\r\33[15G*from t1 limit 2;\33[K", 26) = 26 <0.000846>
11:37:35.115354 read(0, "\n", 1)        = 1 <0.624789>
11:37:35.740309 write(1, "\n", 1)       = 1 <0.000850>
11:37:35.741471 ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0 <0.000025>
11:37:35.741701 rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT TERM CONT TSTP WINCH], [], 8) = 0 <0.000022>
11:37:35.741814 rt_sigactio
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值