|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 551|回復: 1
打印 上一主題 下一主題

linux的strace介绍

[複製鏈接]

224

主題

5

好友

1819

積分

大學生

Rank: 6Rank: 6

  • TA的每日心情
    慵懶
    2019-5-12 16:39
  • 簽到天數: 1335 天

    [LV.10]以壇為家III

    推廣值
    0
    貢獻值
    485
    金錢
    58
    威望
    1819
    主題
    224

    回文勇士 文明人 中學生 簽到勳章 簽到達人 男生勳章 高中生 附件高人 文章勇士 大學生 附件達人

    樓主
    發表於 2012-8-4 09:44:10
    Linux利器strace
    strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
    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.跟踪你的web服务器系统调用
    系统调用优化,也是web性能优化的一个较为重要的方向,尤其是在I/O密集型web应用的情况。我们这里的测试环境是CentOS5.4+Nginx+FastCGI。
    <?php

    //file:hello.php

    define

    (
    'DOCUMENT_ROOT'
    ,
    dirname

    (
    __FILE__
    )
    )
    ;

    include
    (
    "hello.inc"
    )
    ;

    include
    (
    "./hello.inc"
    )
    ;

    include
    (
    DOCUMENT_ROOT .
    "/hello.inc"
    )
    ;

    ?>
    #strace -f -F -o strace_nginx strace /wwwchroot/nginx/sbin/nginx -c /wwwchroot/nginx/nginx.conf
    ... (有部分不重要的数据影响排版,在这里使用...代替)
    //--接受来自客户端的http请求
    4165  recv(16, "GET /hello.php HTTP/1.1rnHost: f"..., 32768, 0) = 391
    4165  epoll_ctl(9, EPOLL_CTL_MOD, 16, {EPOLLIN|EPOLLOUT|EPOLLET, {u32=3081162952, u64=698098541354471624}}) = 0
    //--进行DNS查找
    4165  getsockname(16, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("222.73.211.214")}, [16]) = 0
    //--新建一个socket,连接Fast-CGI,端口号为9000
    4165  socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 17
    4165  ioctl(17, FIONBIO, [1])           = 0
    4165  epoll_ctl(9, EPOLL_CTL_ADD, 17, {EPOLLIN|EPOLLOUT|EPOLLET, {u32=3081163048, u64=697886249710965032}}) = 0
    4165  connect(17, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 )
    4165  epoll_wait(9, {{EPOLLOUT, {u32=3081163048, u64=697886249710965032}}, {...}, 5
    12, 300000) = 2
    4165  gettimeofday({1295420285, 130967}, NULL) = 0
    4165  recv(16, 0xbfdd7d8b, 1, MSG_PEEK) = -1 EAGAIN (Resource temporarily unavailable)
    4165  getsockopt(17, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
    //--将用户http请求交给Fast-CGI
    4165  writev(17, [{"11

    24

    主題

    0

    好友

    355

    積分

    中學生

    Rank: 3Rank: 3

  • TA的每日心情
    慵懶
    4 天前
  • 簽到天數: 137 天

    [LV.7]常住居民III

    推廣值
    0
    貢獻值
    0
    金錢
    50
    威望
    355
    主題
    24
    沙發
    發表於 2012-8-28 21:34:39
    在输出中的每一行前加上时间信息。-tt 时间确定到微秒级。还可以使用-ttt打印相对时间
    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-6-16 15:27 , Processed in 1.844040 second(s), 16 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部