|
|
|
|
挪动端

功能剖析和调试东西:通博8888官网跟踪器之选

跟踪器是一个初级的功能剖析和调试东西,假如你运用过 strace(1) 或许 tcpdump(8),你不该该被它吓到 ... 你运用的便是跟踪器。零碎跟踪器能让你看到许多的工具,而不只是零碎挪用或许数据包,由于罕见的跟踪器都可以跟踪内核或许使用顺序的任何工具。

作者:佚名泉源:通博8888官网中国|2018-03-13 11:38

http://s4.51cto.com/oss/201803/13/fb0cfe498ebba6ccfab4916c12d643f3.jpg-wh_651x-s_2059737113.jpg

通博8888官网 跟踪很神奇!

跟踪器tracer是一个初级的功能剖析和调试东西,假如你运用过 strace(1) 或许 tcpdump(8),你不该该被它吓到 ... 你运用的便是跟踪器。零碎跟踪器能让你看到许多的工具,而不只是零碎挪用或许数据包,由于罕见的跟踪器都可以跟踪内核或许使用顺序的任何工具。

有少量的 通博8888官网 跟踪器可供你选择。由于它们中的每个都有一个官方的(或许非官方的)的不祥物,我们有充足多的选择给孩子们展现。

你喜好运用哪一个呢?

我从两类读者的角度来答复这个题目:大少数人和功能/内核工程师。固然,随着工夫的推移,这也能够会发作变革,因而,我需求实时去更新本文内容,大概是每年一次,或许更频仍。(LCTT 译注:本文最初更新于 2015 年)

关于大少数人

大少数人(开辟者、零碎办理员、运维职员、网络牢靠性工程师(SRE)…)是不需求去学习零碎跟踪器的底层细节的。以下是你需求去理解和做的事变:

1. 运用 perf_events 停止 CPU 分析

可以运用 perf_events 停止 CPU 分析profiling。它可以用一个 火焰图 来抽象地表现。比方:

  1. git clone --depth 1 https://github.com/brendangregg/FlameGraph
  2. perf record -F 99 -a -g -- sleep 30
  3. perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg

通博8888官网 的 perf_events(即 perf,后者是它的下令)是官方为 通博8888官网 用户预备的跟踪器/剖析器。它位于内核源码中,而且维护的十分好(并且如今它的功用还在疾速变强)。它普通是经过 linux-tools-common 这个包来添加的。

perf 可以做的事变许多,但是,假如我只能发起你学习此中的一个功用的话,那便是 CPU 分析。固然从技能角度来说,这并不是事情“跟踪”,而是采样sampling。最难的局部是取得完好的栈和标记,这局部在我的 通博8888官网 Profiling at Netflix 中针对 Java 和 Node.js 讨论过。

2. 晓得它无能什么

正如一位冤家所说的:“你不需求晓得 X 光机是怎样任务的,但你需求明确的是,假如你吞下了一个硬币,X 光机是你的一个选择!”你需求晓得运用跟踪器可以做什么,因而,假如你在业务上的确需求它,你可以当前再去学习它,或许请会运用它的人来做。

复杂地说:简直任何事变都可以经过跟踪来理解它。外部文件零碎、TCP/IP 处置进程、设置装备摆设驱动、使用顺序外部状况。阅读我在 lwn.net 上的 ftrace 的文章,也可以去阅读 perf_events 页面,那边有一些跟踪(和分析)才能的示例。

3. 需求一个前端东西

假如你要购置一特性能剖析东西(有很多公司贩卖这类产物),并要求支持 通博8888官网 跟踪。想要一个直观的“点击”界面去探查内核的外部,以及包括一个在差别货仓地位的耽误热力求。就像我在 Monitorama 演讲 中描绘的那样。

我创立并开源了我本人的一些前端东西,固然它是基于 CLI 的(不是图形界面的)。如许可以使别的人运用跟踪器更快更容易。比方,我的 perf-tools,跟踪新历程是如许的:

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

在 Netflix 公司,我正在开辟 Vector,它是一个实例剖析东西,实践上它也是一个 通博8888官网 跟踪器的前端。

关于功能或许内核工程师

普通来说,我们的任务都十分难,由于大少数人大概要求我们去搞清晰怎样去跟踪某个事情,以及因而需求选择运用哪个跟踪器。为完全了解一个跟踪器,你通常需求花至多一百多个小时去运用它。了解一切的 通博8888官网 跟踪器并能在它们之间做出准确的选择是件很难的事变。(我大概是独一靠近完成这件事的人)

在这里我发起选择如下,要么:

A)选择一个万能的跟踪器,并以它为规范。这需求在一个测试情况中花少量的工夫来搞清晰它的纤细差异和平安性。我如今的发起是 SystemTap 的最新版本(比方,从 源代码 构建)。我晓得有的公司选择的是 LTTng ,虽然它并不是很弱小(但是它很平安),但他们也用的很好。假如在 sysdig 中添加了跟踪点或许是 kprobes,它也是别的的一个候选者。

B)按我的 Velocity 教程中 的流程图。这意味着尽能够运用 ftrace 或许 perf_events,eBPF 曾经集成到内核中了,然后用别的的跟踪器,如 SystemTap/LTTng 作为对 eBPF 的增补。我现在在 Netflix 的任务中便是这么做的。

以下是我对各个跟踪器的评价:

1. ftrace

我爱 ftrace,它是内核黑客最好的冤家。它被构建进内核中,它可以应用跟踪点、kprobes、以及 uprobes,以提供一些功用:运用可选的过滤器和参数停止事情跟踪;事情计数和计时,内核概览;函数流步进function-flow walking。关于它的示例可以检查内核源代码树中的 ftrace.txt。它经过 /sys 来办理,是面向单一的 root 用户的(固然你可以运用缓冲实例以让其支持多用户),它的界面偶然很繁琐,但是它比拟容易调校hackable,而且有个前端:ftrace 的次要创立者 Steven Rostedt 设计了一个 trace-cmd,并且我也创立了 perf-tools 聚集。我最诟病的便是它不是可编程的programmable,因而,举个例子说,你不克不及保管和获取工夫戳、盘算耽误,以及将其保管为直方图。你需求转储事情到用户级以便于停止前期处置,这需求破费一些本钱。它大概可以经过 eBPF 完成可编程。

2. perf_events

perf_events 是 通博8888官网 用户的次要跟踪东西,它的源代码位于 通博8888官网 内核中,普通是经过 linux-tools-common 包来添加的。它又称为 perf,后者指的是它的前端,它相称高效(静态缓存),普通用于跟踪并转储到一个文件中(perf.data),然后可以在之落伍行前期处置。它可以做大局部 ftrace 能做的事变。它不克不及停止函数流步进,而且不太容易调校(而它的平安/错误反省做的更好一些)。但它可以做分析(采样)、CPU 功能计数、用户级的栈转换、以及运用当地变量应用调试信息debuginfo停止行级跟踪line tracing。它也支持多个并发用户。与 ftrace 一样,它也不是内核可编程的,除非 eBPF 支持(补丁曾经在方案中)。假如只学习一个跟踪器,我发起各人去学习 perf,它可以处理少量的题目,而且它也相称平安。

3. eBPF

扩展的伯克利包过滤器extended Berkeley Packet Filter(eBPF)是一个内核内in-kernel的假造机,可以在事情上运转顺序,它十分高效(JIT)。它能够终极为 ftrace 和 perf_events 提供内核内编程in-kernel programming,并可以去加强别的跟踪器。它如今是由 Alexei Starovoitov 开辟的,还没有完成完全的整合,但是关于一些令人印象深入的东西,有些内核版本(比方,4.1)曾经支持了:比方,块设置装备摆设 I/O 的耽误热力求latency heat map。更多参考材料,请查阅 Alexei 的 BPF 演示,和它的 eBPF 示例

4. SystemTap

SystemTap 是一个十分弱小的跟踪器。它可以做任何事变:分析、跟踪点、kprobes、uprobes(它就来自 SystemTap)、USDT、内核内编程等等。它将顺序编译成内核模块并加载它们 —— 这是一种很难包管平安的办法。它开辟是在内核代码树之外停止的,而且在过来呈现过许多题目(内核解体或解冻)。很多并不是 SystemTap 的差错 —— 它通常是初次对内核运用某些跟踪功用,并率先遇到 bug。最新版本的 SystemTap 黑白常好的(你需求从它的源代码编译),但是,很多人依然没有从晚期版本的题目暗影中走出来。假如你想去运用它,花一些工夫去测试情况,然后,在 irc.freenode.net 的 #systemtap 频道与开辟者停止讨论。(Netflix 有一个容错架构,我们运用了 SystemTap,但是我们大概比起你来说,更少担忧它的平安性)我最诟病的事变是,它好像假定你有方法失掉内核调试信息,而我并没有这些信息。没有它我实践上可以做许多事变,但是短少相干的文档和示例(我如今本人开端帮着做这些了)。

5. LTTng

LTTng 对事情搜集停止了优化,功能要好于别的的跟踪器,也支持很多的事情范例,包罗 USDT。它的开辟是在内核代码树之外停止的。它的中心局部十分复杂:经过一个很小的牢固指令集写入事情到跟踪缓冲区。如许让它既平安又疾速。缺陷是做内核内编程不太容易。我以为那不是个大题目,由于它优化的很好,可以充沛的扩展,虽然需求前期处置。它也探究了一种差别的剖析技能。许多的“黑匣子”记载了一切感兴味的事情,以便可以在 GUI 中当前剖析它。我担忧该记载会错失之前没有意料的事情,我真的需求花一些工夫去看看它在理论中是怎样任务的。这个跟踪器上我花的工夫最少(没有特殊的缘由)。

6. ktap

ktap 是一个很有出路的跟踪器,它在内核中运用了一个 lua 假造机,不需求调试信息和在嵌入时设置装备摆设上可以任务的很好。这使得它进入了人们的视野,在某个时分好像要成为 通博8888官网 上最好的跟踪器。但是,由于 eBPF 开端集成到了内核,而 ktap 的集成任务被推延了,直到它可以运用 eBPF 而不是它本人的假造机。由于 eBPF 在几个月过来之后依然在集成进程中,ktap 的开辟者曾经等候了很长的工夫。我盼望在往年的晚些工夫它可以重启开辟。

7. dtrace4linux

dtrace4linux 次要由一团体(Paul Fox)应用业务工夫将 Sun DTrace 移植到 通博8888官网 中的。它令人印象深入,一些供给器provider可以任务,还不是很完满,它最多应该算是实行性的东西(不平安)。我以为关于答应证的担忧,使人们对它坚持慎重:它能够永久也进入不了 通博8888官网 内核,由于 Sun 是基于 CDDL 答应证公布的 DTrace;Paul 的办法是将它作为一个插件。我十分盼望看到 通博8888官网 上的 DTrace,而且盼望这个项目可以完成,我想我参加 Netflix 时将花一些工夫来帮它完成。但是,我不断在运用内置的跟踪器 ftrace 和 perf_events。

8. OL DTrace

Oracle 通博8888官网 DTrace 是将 DTrace 移植到 通博8888官网 (尤其是 Oracle 通博8888官网)的严重高兴。过来这些年的很多公布版本都不断波动的提高,开辟者乃至谈到了改进 DTrace 测试套件,这表现出这个项目很有出路。很多有效的功用曾经完成:零碎挪用、分析、sdt、proc、sched、以及 USDT。我不断在等候着 fbt(函数界限跟踪,对内核的静态跟踪),它将成为 通博8888官网 内核上十分弱小的功用。它终极可否乐成取决于可否吸引充足多的人去运用 Oracle 通博8888官网(并为支持付费)。另一个拘束是它并非完全开源的:内核组件是开源的,但用户级代码我没有看到。

9. sysdig

sysdig 是一个很新的跟踪器,它可以运用相似 tcpdump 的语法来处置零碎挪用syscall事情,并用 lua 做前期处置。它也是令人印象深入的,而且很快乐能看到在零碎跟踪范畴的创新。它的范围性是,它的零碎挪用只能是在事先,而且,它转储一切事情到用户级停止前期处置。你可以运用零碎挪用来做很多事变,固然我盼望能看到它去支持跟踪点、kprobes、以及 uprobes。我也盼望看到它支持 eBPF 以检查内核内概览。sysdig 的开辟者如今正在添加对容器的支持。可以存眷它的进一步开展。

深化阅读

我本人的任务中运用到的跟踪器包罗:

欠好意思,没有更多的跟踪器了! … 假如你想晓得为什么 通博8888官网 中的跟踪器不止一个,或许关于 DTrace 的内容,在我的 从 DTrace 到 通博8888官网 的演讲中有答案,从 第 28 张幻灯片 开端。

【编辑引荐】

  1. 在通博8888官网中主动设置装备摆设IPv6地点
  2. 为初学者引见的通博8888官网 tee下令(6个例子)
  3. 为初学者复杂引见通博8888官网 ldd下令
  4. 通博8888官网容器平安的10个层面
  5. linux初级本领:效劳器集群之keepalived
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
各人都在看
猜你喜好

读 书 +更多

用户体验要素

本书是AJAX之父的经典之作。本书用简便的言语零碎化地解释了设计、技能和贸易交融是最紧张的开展趋向。全书共8章,包罗关于用户体验以及为...

订阅51CTO邮刊

点击这里检查样刊

订阅51CTO邮刊