• linux动态追踪神器——Strace实例介绍【转】


    Strace是Linux下一款通用的进程动态跟踪工具,用来追踪程序执行时的系统调用和所接收的信号。其应用方法如下图(部分)。

    「安全工具」linux动态追踪神器——Strace实例介绍

    首先,简单说说它的使用参数,Strace的参数包括输出参数、过滤参数、统计参数、跟踪参数、启动参数和其他杂项。详细的看帮助文档或者搜索它的用法,我们只简单介绍几个常用的参数:

    -p Pid 跟踪指定的进程号的进程。

    -o 文件 输出追踪信息到文件。

    -f 跟踪由fork调用所产生的子进程。

    -e expr 表达式,用指定追踪的方法,常见有:

    -e trace=open,close,rean,write 跟踪这四个系统函数的调用,默认的为set=all。

    -e trace=file 跟踪有关文件操作的系统调用。

    -e trace=process 跟踪进程调用。

    -e trace=network 跟踪网络调用。

    -e strace=signal 跟踪所系统信号调用。

    -e trace=ipc 跟踪ipc通讯调用。

    其他更多筛选公式略。。。

    -d 输出debug信息到标准错误输出。

    -c 统计功能,统计系统调用次数,时间和出错次数等信息。

    -t/r 输出调用的绝对/相对时间戳。

    -u 用户名 追踪特定用户的进程。

    1、查找实际加载的配置文件

    常有人会问我,为什么我的配置改了,实际沒生效。我问他你改完重启了么,哦,忘了。过了一会又来问,哥我重启了,还是一样没效果。我问你改的那个文件?他说,找网上百度的,不知道为啥不生效。

    这个场景估计很多人都遇到过,那对付这类问题有没有啥好的、一劳永逸的办法,还是只凭经验或者频繁的问人老司机呢?

    其实最好的一个方法,就是用strace追踪下进程加载的文件,这里面的加载的配置文件肯定就是真正使用的配置文件,修改这个文件,重启就肯定生效了。

    举例,我们要找mysql的配置文件

    strace -tf mysql 2>&1|grep cnf

    「安全工具」linux动态追踪神器——Strace实例介绍

    结果如上图,我们看出来了,实际的调用文件是/etc/my.cnf。

    至于命令中的“2>&1” ,有认真的同学会有疑问,去掉可以么?然后去试了,结果grep没起作用,所有内容一股脑全出来了。为什么如此呢?原来starce输出结果是输出到标准错误2的,当做debug信息了。而|管道传递给grep的只是标准输出1 ,所以内容全部显示了(标准错误),而grep 筛选没起作用(标准输出为空)。所以必须要加上“2>&1”,要把标准错误的信息先重定向到标准输出1。这样结果才对。

    同样的方法,适用于查找配置文件,加载类库文件找不到等等。举一反三尝试好了。

    2、追踪耗时进程

    如果你突然发现你的程序启动很慢,或者占用cpu,内存等特别大;或者你发现系统负载很大,你通过top,ps等发现是某个进程导致,比如msyql程序;再者可能服务器被黑了,有个木马进程占了很大资源。我们想进一步细化分析,究竟为啥mysql占的资源特别大?这个木马进程都干了什么坏事?这时候祭出strace神器就ok了。

    我们前面说了strace有统计参数,最简单就是-c参数,对一个进程加-c参数,strace会统计程序系统调用的统计。会统计那些项呢?我们上面介绍-c参数时候说了,有系统调用、耗时、和错误次数。

    统计mysql的调用如下图:

    「安全工具」linux动态追踪神器——Strace实例介绍

    看出来系统调用主要是调用nmap,这是和内存有关的。可以明确mysql主要在做内存操作。

    我们再通过Pid动态跟踪下,执行-c -p Pid 一段时间,ctrl+c退出,就有结果:

    「安全工具」linux动态追踪神器——Strace实例介绍

    可见大部分时间在做pull调用。

    3、综合追踪java耗时、内存泄露,debug错误等

    1)首先查找最好资源的子进程:

    top -H -p `ps aux|perl -lane 'print $F[1] if $F[0]=~/tomcat/'

    「安全工具」linux动态追踪神器——Strace实例介绍

    2)用trace追踪最耗时子进程

    strace -p 31164

    「安全工具」linux动态追踪神器——Strace实例介绍

    发现是futex进程同步线程时候,有大量链接超时。

    3)结合jstack 追踪代码级别的问题

    此子进程转化为16进制,然后用jstack 分析,并搜索这个子进程的16进制,得到具体VM的具体debug信息,从而进一步做代码排查。

    「安全工具」linux动态追踪神器——Strace实例介绍

    好了,其实 strace有更多的扩展应用,网上有很多文章介绍可供学习参考。当然你可以根据自己实际的环境进一步深挖,发现更大的宝藏。

    jstack使用方法参考

    tomcat+java的web程序持续占cpu高问题调试【转】 - paul_hch - 博客园 http://www.cnblogs.com/paul8339/p/7144736.html

    Java线上应用故障排查之一:高CPU占用【转】 - paul_hch - 博客园 http://www.cnblogs.com/paul8339/p/7464206.html

    Java线上应用故障之CPU占用高排查与定位 - paul_hch - 博客园 http://www.cnblogs.com/paul8339/p/7591226.html

    转自

    「安全工具」linux动态追踪神器——Strace实例介绍 https://www.toutiao.com/i6521168589418922504/

  • 相关阅读:
    jQuery插件:用于获取元素自身的HTML内容
    自定义 Web 部件用户界面简介
    在MOSS2010中实现OU下的用户的上下级组织关系
    sharepoint2010人性化的地方--员工离职AD账号禁用(个人网站自动提醒上级经理功能)
    SharePoint2010文档归档策略(2)-从放置库转移到自己定义的文档库
    SharePoint2010文档归档策略
    如何用VS2010在SharePoint中创建自定义字段类型(以eWebEditor为例)
    如何实现SP文档库类似百度文档库的效果 (副标题:如何在SP2013文档库的SWF文件用FlexPager显示)
    查看SharePoint文档库是,显示层次目录,可以点击返回层次
    安装和配置SharePoint 2013 with SP1 Workflow
  • 原文地址:https://www.cnblogs.com/paul8339/p/8446032.html
Copyright © 2020-2023  润新知