linux strace - 追踪系统调用

标签: linux strace 系统调用 | 发表时间:2014-08-15 16:38 | 作者:飞奔的熊猫
出处:http://www.iteye.com
【基本介绍】
有时候发现有个别进程占用了大量CPU或者内存,我们可以查看进程的调用情况。

【strace解释】
[root@sparkVM salt]# strace  -h
usage: strace [-dDffhiqrtttTvVxx] [-a column] [-e expr] ... [-o file]
              [-p pid] ... [-s strsize] [-u username] [-E var=val] ...
              [command [arg ...]]
   or: strace -c [-D] [-e expr] ... [-O overhead] [-S sortby] [-E var=val] ...
              [command [arg ...]]
-c -- count time, calls, and errors for each syscall and report summary
-f -- follow forks, -ff -- with output into separate files
-F -- attempt to follow vforks, -h -- print help message
-i -- print instruction pointer at time of syscall
-q -- suppress messages about attaching, detaching, etc.
-r -- print relative timestamp, -t -- absolute timestamp, -tt -- with usecs
-T -- print time spent in each syscall, -V -- print version
-v -- verbose mode: print unabbreviated argv, stat, termio[s], etc. args
-x -- print non-ascii strings in hex, -xx -- print all strings in hex
-a column -- alignment COLUMN for printing syscall results (default 40)
-e expr -- a qualifying expression: option=[!]all or option=[!]val1[,val2]...
   options: trace, abbrev, verbose, raw, signal, read, or write
-o file -- send trace output to FILE instead of stderr
-O overhead -- set overhead for tracing syscalls to OVERHEAD usecs
-p pid -- trace process with process id PID, may be repeated
-D -- run tracer process as a detached grandchild, not as parent
-s strsize -- limit length of print strings to STRSIZE chars (default 32)
-S sortby -- sort syscall counts by: time, calls, name, nothing (default time)
-u username -- run command as username handling setuid and/or setgid
-E var=val -- put var=val in the environment for command
-E var -- remove var from the environment for command



【例子】
strace -o whoami-strace.txt whoami

open("/lib/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/i686/mmx/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/i686/mmx", 0xbffff190) = -1 ENOENT (No such file or directory) 
open("/lib/i686/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/i686", 0xbffff190) = -1 ENOENT (No such file or directory)
open("/lib/mmx/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/mmx", 0xbffff190) = -1 ENOENT (No such file or directory) 
open("/lib/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib", {st_mode=S_IFDIR|0755, st_size=2352, ...}) = 0
open("/usr/lib/i686/mmx/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/i686/mmx", 0xbffff190) = -1 ENOENT (No such file or directory) 
open("/usr/lib/i686/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)


strace -p processId

【参考】
http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [linux strace 系统调用] 推荐:

linux strace - 追踪系统调用

- - Linux - 操作系统 - ITeye博客
有时候发现有个别进程占用了大量CPU或者内存,我们可以查看进程的调用情况. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

Linux 中用 strace 追踪系统调用和信号值

- - 博客园_iTech's Blog
原文地址: http://www.dbabeta.com/2009/strace.html. 打开man strace,我们能看到对strace的最简洁的介绍就是”strace – trace system calls and signals”. 实际上strace是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的.

linux文件操作之系统调用

- L - 博客园-首页原创精华区
    在linux中,一切都是文件,文件为操作系统服务和设备提供了一个简单而统一的接口,这就意味者程序可以像使用文件那样使用各种设备. 大多数情况下对于文件的操作只用到open,write,lseek,read,close五个系统调用. 本文通过一个简单的例子来介绍这五个调用及关联内容.   这是一个简单的读写文件的例子,先创建一个文本文件,写入一些内容,再把文本内容输出到标准输出,下面开始分析这个例子:.

Linux系统调用过程分析

- - CSDN博客架构设计推荐文章
《Linux内核设计与实现》. linux的系统调用过程:. 用户程序------>C库(即API):INT 0x80 ----->system_call------->系统调用服务例程-------->内核程序. 先说明一下,我们常说的用户API其实就是系统提供的C库. 系统调用是通过软中断指令 INT 0x80 实现的,而这条INT 0x80指令就被封装在C库的函数中.

strace命令小结

- - jackyrong
strace命令是很有用的进程跟踪命令,下面小结下:. 1 strace 是一个非常简单的工具,用来跟踪可执行程序的系统调用(system call). 最简单的使用是,它追踪可行程序运行时的整个生命周期,输出每一个系统调用的名字,参数和返回值. 但是它还可以做更多的事情:. 它可以基于系统调用或者系统调用组来过滤.

通过Strace定位故障原因

- - 火丁笔记
俗话说:不怕贼偷,就怕贼惦记着. 在面对故障的时候,我也有类似的感觉:不怕出故障,就怕你不知道故障的原因,眼睁睁地看着情况恶化却束手无策. 十一长假还没结束,服务器却频现高负载,Nginx出现错误日志:. 看上去是Upstream出了问题,在本例中Upstream就是PHP. 一开始我搞不清楚到底是哪个PHP脚本出现了问题,无奈之下只好通过不断重启PHP服务来缓解高负载故障.

手把手教你用Strace诊断问题

- - 火丁笔记
早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然. 本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路.

分布式系统调用链监控

- - IT瘾-geek
应用架构由集中式向分布式演进后,整个调用关系变得复杂. 分布式架构由复杂且较大规模集群构成,各个应用之间相当独立,可能由不同团队、不同语言实现. 系统一个完整的调用过程可能横跨多个服务及数据中心. 复杂的调用导致系统出问题后难以定位问题. 无法准确知道整体系统性能及运行情况. 一个请求完整的调用链可能如下图,经过多个系统服务,调用关系复杂.

Javascript 里跑Linux

- rockmaple - Shellex&#39;s Blog
牛逼到暴的大拿 Fabrice Bellard,用Javascript实现了一个x86 PC 模拟器,然后成功在这个模拟器里面跑Linux(请用Firefox 4 / Google Chrome 11打开,Chome 12有BUG). 关于这个东西… 伊说 “I did it for fun“,大大啊大大啊….