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

首先,简单说说它的使用参数,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

结果如上图,我们看出来了,实际的调用文件是/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的调用如下图:

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

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

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

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

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

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

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

strace -p 31164

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

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

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

好了,其实 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/

linux动态追踪神器——Strace实例介绍【转】相关推荐

  1. Linux神器strace的使用方法及实践

    在Linux系统中,strace命令是一个集诊断.调试.统计与一体的工具,可用来追踪调试程序,能够与其他命令搭配使用,接下来就Linux系统调用工具strace的使用方法和实践给大家做个详细介绍,一起 ...

  2. linux复制文件夹 实例,linux复制文件夹与文件实例介绍linux操作系统 -电脑资料

    本文章来介绍一下关于linux复制文件夹与文件的一些基础用法,有需要学习的朋友可参考一下本文章, CP命令 格式: CP [选项] 源文件或目录  目的文件或目录 选项说明:-b 同名,备分原来的文件 ...

  3. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  4. linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  5. linux 进程间通信 dbus-glib【实例】详解二(上) 消息和消息总线(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  6. linux 进程间通信 dbus-glib【实例】详解一(附代码)(d-feet工具使用)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  7. Linux服务器安全配置实例(二)用户账户权限配置

    没有绝对的安全 在上一篇文章<linux服务器安全配置实例(一)>中介绍了我对ssh服务的一些常用的安全配置和性能优化. 其实ssh服务是我们进入服务器的一扇大门,这扇大门是提供正常人使用 ...

  8. Java 程序连接 Informix 数据库方法实例介绍

    Java 程序连接 Informix 数据库方法实例介绍 Informix 是一种应用广泛的关系型数据库服务器,支持多种类型的客户端连接程序,包括 .Net.Java.PHP 等.对于 Java 程序 ...

  9. 如何自动安装linux系统,Linux全自动安装操作实例

    手动安装Linux系统费时费力,需要操作的步骤非常多,使用kickstart等工具就能实现Linux系统的全自动安装,下面小编就给大家介绍下Linux全自动安装操作实例,一起来学习下吧. 原理: 使用 ...

最新文章

  1. 给定二叉树先序、中序遍历序列,求后序遍历
  2. 以下构成python循环结构的方法中_超星尔雅初级英语口语(持续更新中)选修课答案...
  3. spark sql 本地调试_干货 | 如何成为大数据Spark高手
  4. 交换机设备登录账号权限1_在交换机中用户权限分为几个级别 分别是什么
  5. 洛谷——P1219 八皇后
  6. while(1)和while(0)
  7. python内置函数详解总结篇_Python内置函数详解——总结篇
  8. 使用神经网络自动提取出它的特征码(1)
  9. TabError: inconsistent use of tabs and spaces in indentation
  10. AI芯片浮出新玩家OURS,来者何人?新晋图灵奖得主华人弟子谭章熹
  11. Deskew Technologies Gig Performer 4 Mac - 现场调音机架
  12. 《自适应软件开发》—从奴隶主到领袖 1 序言
  13. BIM族库下载——Revit灯具族库
  14. 建模学习笔记(一)层次分析法模型学习及相关论文书写 清风数学建模
  15. excel两个字符串相减_Excel小技巧|三种方法计算算式字符串
  16. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
  17. 推荐三个开发C程序的工具(适用各种场合)
  18. 防止PCB会过期,以及过期后的处理办法
  19. Dapper.Contrib
  20. 如何用键盘控制windows窗口移动

热门文章

  1. 删除字符串中重复的字符
  2. C/C++ 常量的定义与应用(编程中的常量)
  3. PHP入门及服务环境配置(Nginx+PHP)
  4. 2015某大型电商集团的前端实习生在线笔试题(无耻的拿来偷看了)
  5. 和屌丝一起学cocos2dx-CCScrollView
  6. C++_类和对象_封装_案例_立方体类_案例点和圆的关系---C++语言工作笔记039
  7. 大数据_Spark_框架简介---Spark工作笔记0001
  8. 大数据_MapperReduce_协处理器_类似Mysql的触发器---Hbase工作笔记0024
  9. STM32工作笔记0019---新建工程模板-基于固件库-M3
  10. 【C#编程基础学习笔记】4---Convert类型转换