使用eBPF在Python堆栈级别跟踪代码是否可行?

时间:2018-11-02 18:23:41

标签: python linux tracing bpf ebpf

长期以来,非Linux平台上的

dtrace一直被宣传为能够动态检测node.js代码以在节点级别进行动态跟踪,例如,允许在JavaScript堆栈框架和变量级别调试节点程序(以及来自核心转储的较低级别的跟踪。

Linux上的eBPF现在达到了这种复杂程度吗?我对Python特别感兴趣,但是如果对任何类似的动态语言都回答了该问题,则会认为该问题已得到回答。

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

1 个答案:

答案 0 :(得分:2)

是的,您可以使用BPF和USDT probes来跟踪Python脚本。不过,您必须build your Python runtime with USDT probes

密件抄送包含a few tracing scripts for 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。