跟踪同一个系统中不同进程的系统调用

跟踪同一个系统中不同进程的系统调用

在编写多线程的程序时,偶尔会遇到某一个线程不工作的现象,想看看到底卡在什么地方。
1)查看日志,在每行日志中都添加线程号,该方法存在一个问题,当日志滚动很多天时,找到某个线程的最后一行日志比较费劲,并且如果没有很详细的debug日志的话,代码检查范围也比较广。
2)使用strace命令,strace命令是查看某个进程的系统调用,我们知道linux下线程其实是进程模拟的,它也有一个进程号。
> top -H -p pid 
Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st [18/1958]
Mem: 32845044k total, 11038828k used, 21806216k free, 881144k buffers
Swap: 8388600k total, 0k used, 8388600k free, 8332956k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20261 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:02.95 ldapproxy
20262 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:06.99 ldapproxy
20263 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:06.96 ldapproxy
20264 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:06.96 ldapproxy
20265 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:06.96 ldapproxy
20266 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy
20267 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy
20268 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy
20269 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy
20270 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy
20271 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy
20272 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy
20273 jackboy 20 0 899m 6468 908 S 0.0 0.0 0:00.49 ldapproxy

或者使用pstree -p pid
ldapproxy(20261)─┬─{ldapproxy}(20262)
├─{ldapproxy}(20263)
├─{ldapproxy}(20264)
├─{ldapproxy}(20265)
├─{ldapproxy}(20266)
├─{ldapproxy}(20267)
├─{ldapproxy}(20268)
├─{ldapproxy}(20269)
├─{ldapproxy}(20270)
├─{ldapproxy}(20271)
├─{ldapproxy}(20272)
└─{ldapproxy}(20273)

然后调用strace -p pid就可以查看每个线程的系统调用。

接下来,用pstack pid命令查看系统调用的栈,相当于gdb的bt命令

附:
通过查找发现程序卡在futex上,如:
futex(0xb770b0, FUTEX_WAIT, 2, NULL

google查询之后,确定为[color=red]信号处理函数[/color]中调用了snprintf函数,printf函数族为不可重入的,在信号处理函数中调用,其结果为[color=red]未确定[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值