首页 > 解决方案 > 使用 eBPF 在 Python 堆栈级别跟踪代码是否可行?

问题描述

长期以来,非 Linux 平台上的 dtrace 一直被宣传为能够动态检测 node.js 代码以在节点级别进行动态跟踪,例如允许在 JavaScript 堆栈帧和变量级别调试节点程序(连同较低的级别跟踪)来自核心转储。

Linux 上的 eBPF 现在是否达到了这种复杂程度?我特别对 Python 感兴趣,但如果这个问题是针对任何类似的动态语言回答的,我会考虑回答这个问题。

如果没有,还需要做什么来支持它?

标签: pythonlinuxtracebpfebpf

解决方案


是的,您可以使用 BPF 和USDT 探针来跟踪 Python 脚本。不过,您必须使用 USDT 探针构建您的 Python 运行时

bcc 包括一些用于 Python 的跟踪脚本。例如,您可以使用pythoncalls.sh打印前 2 个方法调用:

$ ./pythoncalls.sh -T 2 -p 26914
Tracing calls in process 26914 (language: python)... Ctrl-C to quit.

METHOD                                              # CALLS
<stdin>.<module>                                          1
<stdin>.fibo                                       14190928
^C

请注意,其他几个虚拟机支持 USDT 探测,例如 Java、Perl、PHP、Ruby 和 Tcl 的探测。


推荐阅读