我们都知道,在开发和维护后台服务时,监控函数的执行时间是至关重要的。通过监控,我们可以及时发现性能瓶颈,优化代码,确保服务的稳定性和响应速度。然而,传统的方法通常涉及在代码中添加统计信息并上报,这种方法虽然有效,但往往只针对那些被认为是关键路径的函数。
假设在某个时刻,我们突然需要监控一个并非重点关注的函数的执行时间。在这种情况下,修改代码并重新部署服务可能是一项繁琐且耗时的任务。这时,eBPF (扩展的伯克利数据包过滤器)和 BCC ( BPF 编译器集合)就派上了用场。通过使用 eBPF ,我们可以在不修改代码和不重新部署服务的情况下,动态地插入探针来监控函数的执行时间。这不仅大大简化了监控过程,还减少了对服务性能的影响。
完整文章在这里 利用 ebpf bcc 无侵入分析服务函数耗时
1
LindsayZhou 2023-07-01 17:45:47 +08:00 1
uprobe ,好,学到了。
平常我这边 kprobe 用得多一点,最近还准备去看看 tc 的部分。 比起 bcc ,个人会要更喜欢 libbpf / libbpfgo 一点。 不会要在服务器上装 python bcc clang 一大堆东西。libbpf 编译好直接扔上去就行。 各个发行版也都默认开始把 btf 开起来了。 |
2
xuelang OP @LindsayZhou 直接用 libbpf / libbpfgo 的话,开发起来容易吗?我一直都是用 bcc 和 bpftrace ,还没直接用过 lib
|
3
LindsayZhou 2023-07-03 09:13:15 +08:00 1
@xuelang 开发难度我觉得差不多。
内核里有一大堆 libbpf 的示例,可以看看: https://github.com/torvalds/linux/tree/master/samples/bpf libbpfgo 还会更简单一点: https://pkg.go.dev/github.com/aquasecurity/libbpfgo |
4
xuelang OP @LindsayZhou 很强,我学习下,感谢。
|