动态追踪技术:Linux喜迎DTrace

电脑杂谈  发布时间:2019-12-23 21:02:51  来源:网络整理

java linux trace_linux java_java stack trace

通过上面几篇文章的介绍,我们将要可以借助一系列命令,从不同维度获得操作系统当前的性能运行状况。

另外,借助类似Ganglia这样的开源产品,持续不断地实施性能数据收集跟储存,我们基于时间序列的历史性能图形,就可以粗略判读出计算集群的资源消耗情况跟变化趋势。

但是,仅仅某些还是不够的,在这些状况下,我们期望才能了解:“慢,是为什么慢;快,又是为什么快”。

如果要提问这个难题,就需要引入此外一件神兵利器:动态追踪技术(Dynamic Tracing)。

鉴于这套兵器极其复杂(牛逼),属于专家级技能, advanced performance analysis and troubleshooting tool。

据称掌握该技能必须花费至少100小时以上,所以即使不是对于平台性能问题有细腻追求,以及变态般地技术狂热,建议绕过本文。

为了便于展开,今天先起个头,重点梳理下动态跟踪科技的演进简史和现在的生态环境。更加准确详尽的内容,会在后续的文章中正式发表。

上月底,正当全国人民翘首以盼光棍节的之后,开源社区传来一则重要新闻:

Linux 4.9-rc1发布,正式合并了一项重要特征:BPF追踪(Timed sampling)。

系统性能领域的国际导师Brendan Gregg,感动得都快哭了,当即在Twitter上表示这是一个重要的里程碑!

他之后又写了一篇长文《DTrace for Linux 2016》,以示庆祝。

As a long time DTrace user and expert, this is an exciting milestone!

--Brendan Gregg

Linux 合并了BPF而已嘛,跟DTrace这个劳什子有哪些关系呢?

java linux trace_linux java_java stack trace

DTrace 是动态追踪技术的鼻祖,源自 Solaris 操作系统,提供了高级性能分析跟安装功能,它的源代码采用 CDDL 许可证,不兼容 Linux 内核使用的 GPLv2 许可证,无法直接移植。

当然,江湖上也有另外一种说法,Linux之所以经常没有原生支持DTrace,是因为Linus 觉得这玩意没什么必要。

Anyway,随着 BPF跟踪的最终主要功能合并至 Linux 4.9-rc1,Linux 现在有了类似 DTrace 的高级分析跟调试功能。

Linux 这次合并的BPF(The Berkeley Packet Filter ),和Ganglia一样,来自于加州大学伯克利分校(这所学校最有意思,以后需要反复提及)。

BPF,顾名思义,最早也是一个纯粹的封包过滤器,大家非常熟悉的netfilter,就是基于BPF实现的动态编译器。

后来在这些牛人的参加下,进行了扩展,得到了一个所谓的 eBPF,可以成为某些非常通用的内核虚拟机。

通过这些措施,我们虽然可以在 Linux 中形成类似 DTrace 那种常驻内核的动态追踪虚拟机。

Linux 没有 DTrace(名字),但目前有了 DTrace(功能)

严格来说,DTrace这个词本身,已经并不是狭义上基于Solaris的那套工具了,而是代表的是后现代操作系统的一整套工具家族跟方法论。

当时 Solaris 操作系统的几个工程师花了几天几夜去排查一个看似十分神秘的线上问题。

开始人们以为是最高级的问题,就非常卖力java linux trace,结果折腾了几天,最后看到原来是一个非常愚蠢的、某个不起眼的地方的配置问题。

自从那件事情过后,这些工程师就痛定思痛,创造了 DTrace 这样一个非常高级的调试软件,来帮助人们在将来的工作当中避免把过多精力花费在愚蠢问题后面。

毕竟大部分所谓的“诡异问题”其实都是低级问题,属于这种“调不起来很郁闷,调回来了最尴尬”的类型。---《漫谈动态追踪技术》

java linux trace_java stack trace_linux java

通观DTrace的演化过程,几乎相当于一部现代操作系统系统的发展史,细查出来,极其复杂。

但是有两个人非常值得关注,一个是国际级的布道师,一个是中国的代表人物,

初学者完全可以借助阅读它们的文章、代码,甚至微博/Twitter动态,了解动态跟踪科技的实际应用状况。

Brendan Gregg

前SUN性能工程师,最早的DTrace用户,出版了包含《性能之巅》在内的一大批书籍,囊括了性能问题领域的科技、工具、方法论等方方面面。

是动态跟踪科技当之无愧的首席布道师。他维护的个人博客公布了长期的原创内容,并且大幅保持着非常的活跃度。可以成为第一手的学习资料。

Twitter:

个人网站:

章亦春

网名 agentzh。开源项目OpenResty创始人,编写了这些 Nginx 的第三方模块, Perl 开源模块,以及近期一些年写的好多 Lua 方面的库。

他发表过的《漫谈动态追踪技术》,是现在唯一由Brendan认证的中文资料,入门首选。

另外,他本人也在现今的工作、开源工程运营中长期使用动态跟踪技术。

微博:

动态追踪技术更复杂的地方在于追踪器种类众多,让人一时无从下手。

linux java_java stack trace_java linux trace

根据前人的一些心得总结,建议根据下列模式进行选取:

适用于:开发者, 系统管理员, DevOps, SRE

CPU分析

perf_events的应用更广泛,配合Brendan Gregg老师研究的火焰图软件,可以预测程序在所有代码基的资源消耗,精确定位到函数级。

例如:

火焰图实例

进程追踪

# ./execsnoop
Tracing exec()s. Ctrl-C to end.
   PID   PPID ARGS
 22898  22004 man ls
 22905  22898 preconv -e UTF-8
 22908  22898 pager -s
 22907  22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8

适用于:性能或内核工程师

Understanding all the Linux tracers to make a rational decision between them a huge undertaking.

ftrace

linux java_java stack trace_java linux trace

内核hacker的最爱。已经包括在内核,能够支持 tracepoints, kprobes, and uprobes,

并提供一些能力: 事件追踪, 可选用过滤器和参数; 事件计数和时间采样,内核概览;基于变量的模式追踪。

perf_events

Linux用户的主要追踪器之一,它的源代码在内核中,通常在一个 linux-tools-common包。

eBPF

基于内核的虚拟机

SystemTap

最强有力的追踪器。它可以做几乎所有的事情: 分析,打点, kprobes, uprobes (源子 SystemTap), USDT, 内核编程等。

LTTng

事件收集器, 优于其它追踪器,支持多种事件种类java linux trace,包括 USDT。

ktap

一个很有前景的追踪器,基于lua内核虚拟机

dtrace4linux

个人开发者业余产出 (Paul Fox) ,将 Sun DTrace迁移到 Linux。

OL DTrace

Oracle Linux DTrace,将 DTrace 迁移至Oracle Linux的推动。

sysdig

一种新型追踪器, 能够基于类似tcpdump的命令操作 syscall events, 再用lua后处理。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-134409-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...