使用strace追踪多个进程

http://www.ttlsa.com/tools/use-strace-to-track-multiple-processes/

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追踪显得很不方便。可以使用下面的方法来追踪所有的子进程。

1

2

3

4

5

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

function straceall {

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

}

# source /root/.bashrc

执行:

1

# traceall php-fpm

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

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执行语句

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---查看程序在干啥

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

输出:

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

转载请注明出处:使用strace追踪多个进程 http://www.ttlsa.com/html/1841.html

时间: 2024-08-27 04:22:32

使用strace追踪多个进程的相关文章

使用strace追踪 mysqld

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

关于用strace工具定位vrrpd进程有时会挂死的bug

只做工作总结备忘之用. 正在烧镜像,稍总结一下进来改bug遇到的问题. 一个项目里要用到L3 switch的nat,vrrp功能,但实地测试中偶然出现write file挂死的情况,但不是必现.交付在即,于是加调试信息,反复跑配置的脚本,定位bug. 一,期初怀疑是vtysh与vrrpd进程通信出现阻塞(现象即是系统挂死). (1)因为在跑配置脚本时,出现了enable命令也挂死的情况,所以这么怀疑: (2)在vrrpd与vtysh命令传输的关键点加打印信息(注意vrrpd不要-d daemon

用oradebug short_stack及strace -p分析oracle进程是否dead或出现故障

1,可以采用oradebug或者strace -p跟踪后台或前台进程是否dead或hang住2,如果进程出现故障,必会在对应的TRC文件写入最新信息,基于此可以获取非常重要的信息进一步分析与诊断   日志文件在background_dump_dest3,采用 ll -lhrt *lgwr*|tail -10f  获取最新的进程的TRC文件4,而且出现故障时,多半会在ALERT日志记录相关信息,此是排除故障重要且首要的方法及思路5,oradebug setospid ospid  oradebug

#定位系统性能瓶颈# 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提供决定当前时间和日期的 界面.某些操作系统提供

shell学习五十四天----进程系统调用的追踪strace

strace 前言:strace常用来跟踪进程执行时的系统调用的所接受的信号.在linux世界,进程是不能直接访问硬件设备,当进程需要访问硬件(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备.strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间,有其在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用.当你想知道程序和操作系统是如何交互的时候,这是极其方便的,比如你想知道执行了哪些系统调用,并且以何种顺序执

9.11 strace:跟踪进程的系统调用 、ltrace:跟踪进程调用库函数

strace 是Linux环境下的一款程序调试工具,用于检查一个应用程序所使用的系统调用以及它所接收的系统信息.strace会追踪程序运行时的整个生命周期,输出每一个系统调用的名字.参数.返回值和执行所消耗的时间等,是高级运维和开发人员排查问题的杀手铜. strace命令的参数选项及说明 -c 统计每一个系统调用所执行的时间.次数和出错的次数等 -d 输出strace关于标准错误的调试信息 -f 跟踪目标进程,以及目标进程创建的所有子进程 -ff 如果提供-o filename,则将所有进程的跟

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

strace常用命令学习

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