本篇文章给大家带来了linux命令动态追踪工具的相关知识,其中主要介绍工作中常用的动态追踪工具strace、arthas、bpftrace等。希望对大家有帮助。
线程与内存剖析,只能观测到进程的整体情况,有些时候我们需要观测到某一方法级别,比如调用方法test()时,传入的参数是什么,返回值是多少,花费了多少时间?这种情况下,我们就需要使用一些动态追踪工具了,如strace、arthas、bpftrace、systemtap等。
strace与ltrace
strace是Linux中用来观测系统调用的工具,学过操作系统原理都知道,操作系统向应用程序暴露了一批系统调用接口,应用程序只能通过这些系统调用接口来访问操作系统,比如申请内存、文件或网络io操作等。
用法如下:
# -T 打印系统调用花费的时间 # -tt 打印系统调用的时间点 # -s 输出的最大长度,默认32,对于调用参数较长的场景,建议加大 # -f 是否追踪fork出来子进程的系统调用,由于服务端服务普通使用线程池,建议加上 # -p 指定追踪的进程pid # -o 指定追踪日志输出到哪个文件,不指定则直接输出到终端 $ strace -T -tt -f -s 10000 -p 87 -o strace.log
实例:抓取实际发送的SQL
有些时候,我们会发现代码中完全没问题的SQL,却查不到数据,这极有可能是由于项目中一些底层框架改写了SQL,导致真实发送的SQL与代码中的SQL不一样。
遇到这种情况,先别急着扒底层框架代码,那样会比较花时间,毕竟程序员的时间很宝贵,不然要加