strace命令:查看进程的系统调用

strace命令:查看进程的系统调用

目录

1 前言2 strace3 strace的使用4 资料

1 前言

今天我值班,发现一个生产环境有一个用户的查询脚本一直在运行,大概有2个小时的运行时间了。

大概看了看,这个查询涉及6年的MBS数据,属于大数据查询,一般会比较慢,但不应该慢到这个地步。

其他用户的查询早就结束了,而这个用户的却不仅有在runnning的,还有一个在pending,于是怀疑是否需要停掉这个脚本,以免环境的使用。

CTO看了看,说根据调试信息我应该可以找到原因的。过了一分钟,我没有找到,他找到了。我问,要不要停到这个脚本,他又看看了strace得输出,说没事,这个脚本还在继续进行计算,反正其他用户还没有涌上来(这个用户起得比较早),先让他跑着。

2 strace

strace是一个轻量级的调试工具,可以快速查看程序、进程的系统调用情况,查看程序的运行状态,类似的有lsof命令。

3 strace的使用

使用方法:

strace [option] -p PIDstrace [option] command

基本选项:

-p pid : 查看PID的系统调用情况-o file : 将调试信息保存到文件,而不是打印到屏幕-f : 也查看子进程的调用信息,否则,只查看该进程本身的调用-ff: 一旦有 -o filename 选项,则每个子进程文件保存为 filename.pid

时间相关选项:

-r : 打印相对时间-t : 打印绝对时间-tt: 打印时间,精确到秒-T : 打印每个系统调用花费的时间

调试信息外观:

-v : 详细模式,打印完整argv,stat,termio[s]等-x : 以十六进制打印非ASCII字符-xx: 以十六进制打印所有字符-a column : 设置打印的列数,默认是40-s strsize : 限制打印字符串的长度(默认32)-S sortby : 对系统调用排序,选择: time, calls, name, nothing (default time)

调试内容定制:

-O overhead : 设置查看系统调用的开销时间时间overhead秒-e expr : 使用一个表达式,如 option=[!]all, option=[!]var 来定义查看的系统调用, option:trace,abbrev,verbose,raw,signal,read,write-D : 以子孙进程的形式运行strace,而不是以父进程的形式-c : 统计每个系统调用的时间、调用、错误等总结信息,最后会打印统计信息

辅助选项:

-q : 省去attaching、 detaching等信息,如果是调试命令或者输出到文件时候,则自动去除;只有调试现有进程时才需要显式去除-i : 打印每个系统调用的指令指针-u username: 以用户的uid/gid运行调试命令,只有root才有此权限-E var=val : 为执行的调试命令添加环境变量,形式是 var=val-E var: 为执行的调试命令删除环境变量,形式是 var=

常用举例:

strace -tfp PIDstrace -o output.txt cmdstrace -o output.txt -fp PID

4 资料

http://en.wikipedia.org/wiki/Stracehttp://stackoverflow.com/questions/174942/how-to-use-stracehttp://timetobleed.com/hello-world/http://www.math-linux.com/linux/tutorials/article/strace-tool-linux-debugging-troubleshooting


作者简介:

朱春来(Leslie Zhu),金融工程师,毕业于西安电子科技大学, 喜欢历史,喜欢编程. 日常在GNU/Linux环境下进行C/C++、Python开发,对Common Lisp、Node.js、金融等感兴趣。可以通过邮箱(pythonisland@gmail.com)联系他,或者直接在他的个人主页上留言.

访问朱春来(Leslie Zhu)的个人主页(http://lesliezhu.github.com)

strace命令:查看进程的系统调用

相关文章:

你感兴趣的文章:

标签云: