资讯专栏INFORMATION COLUMN

strace & ltrace & phpstrace

huayeluoliuhen / 2080人阅读

摘要:是环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息。追踪程序运行时的整个生命周期,输出每一个系统调用的名字,参数,返回值和执行消耗的时间等。设置打印的字符串最大长度。使用某个用户或组来运行命令。

strace

strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息。追踪程序运行时的整个生命周期,输出每一个系统调用的名字,参数,返回值和执行消耗的时间等。

常用参数:

-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 输出过滤器,通过表达式,可以过滤出掉你不想要输出

追踪多个进程方法

当有多个子进程的情况下,比如php-fpm、nginx等,用strace追踪显得很不方便。可以使用下面的方法来追踪所有的子进程。

# vim /root/.bashrc //添加以下内容
function straceall {
    strace $(pidof "${1}" | sed "s/([0-9]*)/-p 1/g")
}
# source /root/.bashrc
# traceall php-fpm //监控phpfpm
OR
# strace -tt -T $(pidof "php-fpm: pool www" | sed "s/([0-9]*)/-p 1/g")
追踪web服务
# 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
追踪mysql
# strace -f -F -ff -o mysqld-strace -s 1024 -p mysql_pid
# find ./ -name "mysqld-strace*" -type f -print |xargs grep -n "SELECT.*FROM"
查看程序做了什么
#!/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
ltrace

-a 对齐具体某个列的返回值
-c 计算时间和调用,并在程序退出时打印摘要
-C 解码低级别名称(内核级)为用户级名称
-d 打印调试信息
-e 改变跟踪的事件
-f 跟踪子进
-h 打印帮助信息
-i 打印指令指针,当库调用时。
-l 只打印某个库中的调用。
-L 不打印库调用。
-n, --indent=NR 对每个调用级别嵌套以NR个空格进行缩进输出。
-o, --output=file 把输出定向到文件。
-p PID 附着在值为PID的进程号上进行ltrace。
-r 打印相对时间戳。
-s STRLEN 设置打印的字符串最大长度。
-S 显示系统调用。
-t, -tt, -ttt 打印绝对时间戳。
-T 输出每个调用过程的时间开销。
-u USERNAME 使用某个用户id或组ID来运行命令。
-V, --version 打印版本信息,然后退出。
-x NAME treat the global NAME like a library subroutine.

phpstrace

phpstrace追踪php进程

Usage: ./php-strace [ options ]
-h|--help               show this help
-l|--lines     output the last N lines of a stacktrace. Default: 100
--process-name  name of running php processes. Default: autodetect
--live                  search while running for new upcoming pid"s

使用truss/strace/ltrace跟踪进程

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31961.html

相关文章

  • Linux下用户空间调试工具

    摘要:有几个下的用户空间调试工具和技术,他们用来分析用户空间问题相当有用。捕捉库调用的输出是一套调试和分析工具。在种获得帮助总结在这篇文章中,我们已经看到不同类型的用户空间的调试工具。 根据定义,调试工具是那些那些使我们能够监测、控制和纠正其他程序的程序。我们为什么应该用调试工具呢? 在有些情况下,运行一些程序的时候我们会被卡住,我们需要明白究竟发生了什么。 例如, 我们正在运行应用程序,它...

    Leck1e 评论0 收藏0
  • 【原】Linux shell script 2>&1是什么意思

    摘要:标准输入重定向用,标准错误重定向用,这样三个标准文件描述符都能正确的区分重定向了。的作用是复制一个现存的文件描述符。函数返回的新文件描述符同样与参数共享同一文件表项。 先说结论, 2>&1 的意思是,把标准错误(stderr)重定向到标准输出(stdout) 如果想了解为什么,可以继续阅读: 1和2 是什么 shell中,有一些常用的文件描述符(file descriptor): 0:...

    big_cat 评论0 收藏0
  • Linux后台研发超实用命令总结

    摘要:排序执行即可,默认是按照占用排序,也可以执行从内存大小排序转换为排序。传送门后端研发菜鸟成长记第一章入门之云服务器 作者 码龙喵 转载请注明出处 1.概述 计算机领域水太深了,不可能什么都记住,所以只需要理解并记住核心的原理,其他的交给网络,用的时候查一下就可以了。因此整理了平时工作中自己觉得好用的命令。 2.系统相关 查看手册命令 man 只查看当前下一级目录占用大小 du --ma...

    TesterHome 评论0 收藏0
  • PHP技术栈

    摘要:熟悉编程,对于网络模型有一定的认知,熟悉多路复用技术。对主从延迟能有效解决。能够支持对于千万级流量网站的正常开发维护工作。结束语技术无止境,未来有更多可能。 本文旨在给要学习 PHP 的新手一个大概的认知轮廓,在心里有个学习的结构,有的放矢,避免走太多弯路。大神请忽略。 入门阶段 预备知识 1、掌握基本HTML、JS、CSS语法;熟悉 Bootstrap。 参考: https:/...

    xuexiangjys 评论0 收藏0
  • PHP技术栈

    摘要:熟悉编程,对于网络模型有一定的认知,熟悉多路复用技术。对主从延迟能有效解决。能够支持对于千万级流量网站的正常开发维护工作。结束语技术无止境,未来有更多可能。 本文旨在给要学习 PHP 的新手一个大概的认知轮廓,在心里有个学习的结构,有的放矢,避免走太多弯路。大神请忽略。 入门阶段 预备知识 1、掌握基本HTML、JS、CSS语法;熟悉 Bootstrap。 参考: https:/...

    niuxiaowei111 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<