使用strace追踪 mysqld

转载请注明出处: http://www.ttlsa.com/html/1841.html

strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息。追踪程序运行时的整个生命周期,输出每一个系统调用的名字,参数,返回值和执行消耗的时间等。 strace常用参数: -p 跟踪指定的进程 -f 跟踪由fork子进程系统调用 -F 尝试跟踪vfork子进程系统调吸入,与-f同时出现时, vfork不被跟踪 -o filename 默认strace将结果输出到stdout。通过-o可以将输出写入到filename文件中 -ff 常与-o选项一起使用,不同进程(子进程)产生的系统调用输出到filename.PID文件 -r 打印每一个系统调用的相对时间 -t 在输出中的每一行前加上时间信息。 -tt 时间确定到微秒级。还可以使用-ttt打印相对时间 -v 输出所有系统调用。默认情况下,一些频繁调用的系统调用不会输出 -s 指定每一行输出字符串的长度,默认是32。文件名一直全部输出 -c 统计每种系统调用所执行的时间,调用次数,出错次数。 -e expr 输出过滤器,通过表达式,可以过滤出掉你不想要输出

1. strace追踪多个进程方法: 当有多个子进程的情况下,比如php-fpm、nginx等,用strace追踪显得很不方便。可以使用下面的方法来追踪所有的子进程。

# vim /root/.bashrc //添加以下内容
function straceall {
strace $(pidof "${1}" | sed ‘s/\([0-9]*\)/-p \1/g‘)
}
# source /root/.bashrc

1

2

3

4

5

# vim /root/.bashrc //添加以下内容

function straceall {

strace $(pidof "${1}" | sed ‘s/\([0-9]*\)/-p \1/g‘)

}

# source /root/.bashrc

执行:

# traceall php-fpm

1

# traceall php-fpm

2. 追踪web服务器系统调用情况

# strace -f -F -s 1024 -o nginx-strace /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# strace -f -F -o php-fpm-strace /usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm.conf

1

2

# strace -f -F -s 1024 -o nginx-strace /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

# strace -f -F -o php-fpm-strace /usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm.conf

3. 追踪mysql执行语句

# strace -f -F -ff -o mysqld-strace -s 1024 -p mysql_pid
# find ./ -name "mysqld-strace*" -type f -print |xargs grep -n "SELECT.*FROM"

1

2

# strace -f -F -ff -o mysqld-strace -s 1024 -p mysql_pid

# find ./ -name "mysqld-strace*" -type f -print |xargs grep -n "SELECT.*FROM"

4. whatisdong---查看程序在干啥

#!/bin/bash
# This script is from http://poormansprofiler.org/
nsamples=1
sleeptime=0
pid=$(pidof $1)

for x in $(seq 1 $nsamples)
do
gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid
sleep $sleeptime
done | awk ‘
BEGIN { s = ""; }
/^Thread/ { print s; s = ""; }
/^\#/ { if (s != "" ) { s = s "," $4} else { s = $4 } }
END { print s }‘ | sort | uniq -c | sort -r -n -k 1,1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/bin/bash

# This script is from http://poormansprofiler.org/

nsamples=1

sleeptime=0

pid=$(pidof $1)

for x in $(seq 1 $nsamples)

do

gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid

sleep $sleeptime

done | \

awk ‘

BEGIN { s = ""; }

/^Thread/ { print s; s = ""; }

/^\#/ { if (s != "" ) { s = s "," $4} else { s = $4 } }

END { print s }‘ | \

sort | uniq -c | sort -r -n -k 1,1

输出:

# profiler.sh mysqld
727 pthread_cond_wait@@GLIBC_2.3.2,cache_thread,put_in_cache=true),handle_one_connection,start_thread,??
4 pthread_cond_wait@@GLIBC_2.3.2,os_event_wait_low,os_aio_simulated_handle,fil_aio_wait,io_handler_thread,start_thread,??
4 ??,??
2 read,my_real_read,my_net_read,do_command,handle_one_connection,start_thread,??
1 pthread_cond_wait@@GLIBC_2.3.2,os_event_wait_low,srv_master_thread,start_thread,??
1 pthread_cond_wait@@GLIBC_2.3.2,MYSQL_BIN_LOG::wait_for_update,mysql_binlog_send,dispatch_command,do_command,handle_one_connection,start_thread,??
1 do_sigwait,sigwait,signal_hand,start_thread,??
1

1

2

3

4

5

6

7

8

9

# profiler.sh mysqld

727 pthread_cond_wait@@GLIBC_2.3.2,cache_thread,put_in_cache=true),handle_one_connection,start_thread,??

4 pthread_cond_wait@@GLIBC_2.3.2,os_event_wait_low,os_aio_simulated_handle,fil_aio_wait,io_handler_thread,start_thread,??

4 ??,??

2 read,my_real_read,my_net_read,do_command,handle_one_connection,start_thread,??

1 pthread_cond_wait@@GLIBC_2.3.2,os_event_wait_low,srv_master_thread,start_thread,??

1 pthread_cond_wait@@GLIBC_2.3.2,MYSQL_BIN_LOG::wait_for_update,mysql_binlog_send,dispatch_command,do_command,handle_one_connection,start_thread,??

1 do_sigwait,sigwait,signal_hand,start_thread,??

1

时间: 2024-12-11 05:47:10

使用strace追踪 mysqld的相关文章

使用strace追踪多个进程

http://www.ttlsa.com/tools/use-strace-to-track-multiple-processes/ strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息.追踪程序运行时的整个生命周期,输出每一个系统调用的名字,参数,返回值和执行消耗的时间等. strace常用参数:-p 跟踪指定的进程-f 跟踪由fork子进程系统调用-F 尝试跟踪vfork子进程系统调吸入,与-f同时出现时, vfork不被跟踪-o fil

strace 命令分析mysql的相关的问题

strace 命令分析mysql的相关的问题 使用方式: strace -p pid or strace command 本篇博文主要简单介绍下面关于MySQL的5个问题: 利用strace观察mysqld对my.cnf 配置文件的加载顺序 MySQL启动后默认会启动多少线程 如何匹配conn_id和os_thread_id 利用strace观察client的SQL执行 利用strace观察server端执行 1.strace观察mysqld对my.cnf 配置文件的加载顺序 命令如下: str

strace常用命令学习

strace是一个非常简单的工具,它可以跟踪系统调用的执行.它常用来跟踪进程执行时的系统调用和所接受的信号.在调试的时候,strace能帮助我们追踪到一个程序所执行的而系统调用.当我们想知道程序和操作系统如何交互的时候,这时极其方便的,比如我们想知道执行了哪些系统调用,并且以何种顺序执行.我们知道,在linux中,进程不能直接访问硬件设备,当进程需要直接访问硬件设备(比如读取磁盘文件,接受网络数据时),必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备.strance可以追踪到一个进程产

#定位系统性能瓶颈# strace & ltrace

strace和ltrace分别相应的是系统调用和库函数调用, 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件. 而库函数调用则面向的是应用开发的.相当于应用程序的api.常见的lib有openssl.libxml等. 前者属于内核层.后者属于用户层,以下有其层次相应图 引用<UNIX环境高级编程>对这两个概念的差别描写叙述例如以下:      还有一个可说明系统调用和库函数之间的区别的样例是, U N I X提供决定当前时间和日期的 界面.某些操

#定位系统性能瓶颈# strace &amp; ltrace

strace和ltrace分别对应的是系统调用和库函数调用, 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件. 而库函数调用则面向的是应用开发的,相当于应用程序的api,常见的lib有openssl.libxml等. 前者属于内核层,后者属于用户层,下面有其层次对应图 引用<UNIX环境高级编程>对这两个概念的区别描述如下:      另一个可说明系统调用和库函数之间的差别的例子是, U N I X提供决定当前时间和日期的 界面.某些操作系统提供

Strace 的初步使用, 结合nginx

目录 Strace 的初步使用, 结合nginx 一,安装 二,使用 Strace 的初步使用, 结合nginx 一,安装 sudo apt-get install strace 测试中可能用到的命令 ps -ef | grep nginx ps -eo pid,ppid,sid,tty,pgrp,comm | grep -E 'bash|PID|nginx' 二,使用 我首先进入到nginx目录下 [email protected]:/usr/local/nginx$ pwd /usr/loc

利用strace和perf分析MySQL运行

利用strace和perf分析MySQL运行 周万春 perf strace pstack pt-pmp 都是一类工具 [[email protected] ~]# perf top Samples: 330 of event 'cpu-clock', 4000 Hz, Event count (approx.): 42848685 lost: 0/0 drop: 0/0 Overhead Shared Object Symbol 21.09% [kernel] [k] vmw_cmdbuf_h

MySQL 几种调式分析利器

原文:MySQL 几种调式分析利器 目录 pstack gdb strace perf pstack 获取堆栈信息 问题线程的定位 负载较低 mysql_pid=4522 pstack $mysql_pid>pstack.info pt-pmp对堆栈信息排序 pt-pmp pstack.info | less 也可以直接执行pt-pmp pt-pmp --pid 4522 如 10 __io_getevents_0_4(libaio.so.1),LinuxAIOHandler::collect(

linux常用进程管理工具及查看

linux进程查看及管理工具 我们常用的进程管理工具有: pstree, ps, pidof, pgrep, top, htop, glance,dstat linux系统各进程的相关信息都保存于/proc/PID目录下的各文件中: [[email protected] ~]# cd /proc/ [[email protected] proc]# ls 1     1454  1781  23   272  31    6066    buddyinfo    kcore         sc