BCC(BPF 编译器集合)是一组功能强大的适当工具和示例文件,用于创建资源丰富的内核跟踪和操作程序。
它利用扩展的 BPF(伯克利数据包过滤器),最初称为 eBPF,是 Linux 3.15 中的新功能之一。
BCC/BPF – 用于 Linux 性能监控的动态跟踪工具
实际上,BCC 使用的大多数组件都需要 Linux 4.1 或更高版本,其值得注意的功能包括:
- 不需要第 3 方内核模块,因为所有工具都基于内置于内核中的 BPF 工作,并且 BCC 使用 Linux 4.x 系列中添加的功能。
- 能够观察软件执行情况。
- 包含多个性能分析工具以及示例文件和手册页。
BCC 最适合高级 Linux 用户,可以使用 C 语言的内核检测以及 Python 和 lua 的前端轻松编写 BPF 程序。
此外,它还支持多种任务,例如性能分析、监控、网络流量控制等等。
如何在Linux系统中安装BCC
请记住,BCC 使用 Linux 内核版本 4.1 或更高版本中添加的功能,并且作为要求,应该使用以下设置的标志来编译内核:
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
# [optional, for tc filters]
CONFIG_NET_CLS_BPF=m
# [optional, for tc actions]
CONFIG_NET_ACT_BPF=m
CONFIG_BPF_JIT=y
# [for Linux kernel versions 4.1 through 4.6]
CONFIG_HAVE_BPF_JIT=y
# [for Linux kernel versions 4.7 and later]
CONFIG_HAVE_EBPF_JIT=y
# [optional, for kprobes]
CONFIG_BPF_EVENTS=y
# Need kernel headers through /sys/kernel/kheaders.tar.xz
CONFIG_IKHEADERS=y
您可以使用单个 grep 命令检查所有指定的内核配置标志,并提供所有标志名称作为模式。
grep -E 'CONFIG_BPF=y|CONFIG_BPF_SYSCALL=y|CONFIG_NET_CLS_BPF=m|CONFIG_NET_ACT_BPF=m|CONFIG_BPF_JIT=y|CONFIG_HAVE_BPF_JIT=y|CONFIG_HAVE_EBPF_JIT=y|CONFIG_BPF_EVENTS=y|CONFIG_IKHEADERS=y' /boot/config-$(uname -r)
检查内核标志
验证内核标志后,就可以在 Linux 系统中安装 BCC 工具了。
在 Debian 上安装 BCC 工具
您可以在常规 Debian 主存储库中找到 bcc 及其工具。 它们来自源包 bpfcc,名为 bpfcc-tools、python3-bpfcc、libbpfcc 和 libbpfcc-dev。
echo deb http://cloudfront.debian.net/debian sid main >> /etc/apt/sources.list
sudo apt-get install -y bpfcc-tools libbpfcc libbpfcc-dev linux-headers-$(uname -r)
在 Ubuntu 上安装 BCC 工具
您可以在常规 Ubuntu Universe 存储库中找到不同版本的 bcc。
sudo apt-get install bpfcc-tools linux-headers-$(uname -r)
在 Fedora 上安装 BCC 工具
从 Fedora 40 开始,标准存储库中提供了 bcc 二进制文件。
sudo dnf install bcc
在 RHEL 上安装 BCC 工具
bcc 已作为 bcc-tools 包含在官方 yum 存储库中。
sudo yum install bcc-tools
在 Arch Linux 上安装 BCC 工具
bcc 在标准 Arch 存储库中可用,并且可以使用 pacman 命令进行安装。
pacman -S bcc bcc-tools python-bcc
在 openSUSE 上安装 BCC 工具
对于 openSUSE Leap 42.2(及更高版本)和 Tumbleweed,bcc 已包含在官方存储库中。
sudo zypper ref
sudo zypper in bcc-tools bcc-examples
如何在Linux系统中使用BCC工具
所有 BCC 工具都安装在 /usr/share/bcc/tools
目录。 但是,您也可以从 BCC Github 存储库中运行它们,位于 /tools
他们以 .py
扩大。
ls /usr/share/bcc/tools
密件抄送工具
我们将介绍几个示例:监控一般 Linux 系统性能和网络。
跟踪 Linux 中的 open() 系统调用
让我们从追踪所有开始 open()
使用 opensnoop 工具进行系统调用。 这使我们能够通过识别数据文件、配置文件等来了解各种应用程序的工作原理:
cd /usr/share/bcc/tools
sudo ./opensnoop
跟踪 Linux 中的 open() 系统调用
分析 Linux 中的磁盘 I/O 延迟
此示例显示使用生物延迟工具的磁盘 I/O 延迟的汇总分布。 执行命令后,等待几分钟,然后按 Ctrl-C 结束命令并查看输出。
sudo ./biolatency
分析 Linux 中的磁盘 I/O 延迟
跟踪 Linux 中的新进程
在本节中,我们将使用 execsnoop 工具来跟踪正在执行的新进程。 每次进程被分叉时 fork()
和 exec()
系统调用,它显示在输出中。 然而,并非所有进程都被捕获。
sudo ./execsnoop
跟踪 Linux 中的新进程
跟踪较慢的 Ext4 文件系统操作
使用ext4slower跟踪ext4文件系统常见的慢于10ms的操作,帮助我们识别通过文件系统独立缓慢的磁盘I/O。
它只输出那些超过阈值的操作:
sudo ./ext4slower
查找较慢的 Ext4 操作
使用 biosnoop 探索磁盘 I/O 活动
接下来,让我们深入了解使用 biosnoop 工具每秒为每个磁盘 I/O 打印一行,其中包括进程 ID、扇区、字节和延迟等详细信息:
sudo ./biosnoop
检查磁盘 I/O 活动
分析系统缓存性能
此后,我们继续使用cachestat工具每秒显示系统缓存中的一行汇总统计信息。 这可以通过指出低缓存命中率和高丢失率来进行系统调整操作:
sudo ./cachestat
检查系统缓存性能
在 Linux 中监控 TCP 连接
使用 tcpconnect 工具每秒监控 TCP 连接。 其输出包括源地址、目标地址以及端口号。 该工具对于跟踪意外的 TCP 连接非常有用,从而帮助我们识别应用程序配置中的低效或攻击者。
sudo ./tcpconnect
在 Linux 中监控 TCP 连接
上述所有工具还可以与各种选项一起使用,要启用给定工具的帮助页面,请使用 -h
选项,例如:
sudo ./tcpconnect -h
密件抄送工具帮助页面
跟踪失败的 exec() 系统调用
要跟踪失败的 exec() 系统调用,请使用 -x
opensnoop 的选项如下:
sudo ./opensnoop -x
跟踪失败的 exec() 系统调用
跟踪特定过程函数
下面的最后一个示例演示了如何执行自定义跟踪操作。 我们正在使用特定进程的 PID 来跟踪该进程。
首先,确定进程ID:
pidof firefox
稍后,运行自定义跟踪命令。 下面的命令 -p
指定进程 ID, do_sys_open()
是一个动态跟踪的内核函数,包括其第二个参数作为字符串。
sudo ./trace -p 4095 'do_sys_open "%s", arg2'
概括
BCC 是一个功能强大且易于使用的工具包,适用于各种系统管理任务,例如跟踪系统性能监控、跟踪块设备 I/O、TCP 函数、文件系统操作、系统调用、Node.js 探针等等。 重要的是,它附带了几个示例文件和手册页,用于指导您的工具,使其用户友好且可靠。
最后但并非最不重要的一点是,您可以通过下面的评测部分分享您对这个主题的想法、提出问题、提出有用的建议或任何建设性的反馈来联系我们。
资讯来源:由a0资讯编译自THECOINREPUBLIC。版权归作者A0资讯所有,未经许可,不得转载