这篇短文出自于 《Linux Networking, Tracing and IO Visor, a New Systems Performance Tool for a Distributed World》 一文中的 tracing
和 dynamic tracing
两小节。我没有原文翻译,只是写出自己的理解:
作为软件工程师,可能都会遇到这样的 bug
,程序运行好久才会出现问题,但是从问题现场又看不懂为什么会出现这种情况。尝试用调试器打断点,经常也是无功而返。因为断点会对程序运行的时序产生影响,很可能导致 bug
无法重现。这种情况下, dynamic tracing
也许就是很好的解决办法了。
Dynamic tracing
的一个重要特点就是可以动态地插入和移除 probe
,这样可以准确地控制 tracing
对系统造成的额外的 overhead
。在你怀疑的地方插入 probe
,通过观察 probe
触发时输出的信息,很可能会让你眼前一亮。 因此掌握 dynamic tracing
技术会给工作中带来很大帮助。 Solaris/FreeBSD/Illumos/Mac OS X
有 DTrace
, Linux
上有 perf_events/kprobes/uprobes
等等,希望大家都可以尝试一下这些 dynamic tracing
工具, enjoy dynamic tracing
!