BCC – 用于Linux性能监视,网络和更多的动态跟踪工具【转】
转自:http://blog.chinaunix.net/uid-22954220-id-5763682.html
BCC(BPF编译器集合 )是用于创建足智多谋内核跟踪和操作程序一套功能强大的适当的工具和示例文件。 它采用扩展BPF( Berkeley包过滤器 ),最初被称为eBPF这是在Linux的3.15的新功能之一。
实际上,大多数由BCC使用的组件的需要的Linux 4.1或以上,和其值得注意的特点包括:
- 不需要第三方内核模块,因为所有的工具都基于内置于内核的BPF工作,BCC使用Linux 4.x系列中添加的功能。
- 支持观察软件执行。
- 包括几个性能分析工具与示例文件和手册页。
建议阅读: 20命令行工具来监控Linux性能
最适合用于高级Linux用户,BCC可以很容易地编写使用内核仪表用C BPF程序和前端在Python和Lua。此外,它支持多个任务,如性能分析,监控,网络流量控制等。
如何在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 CONFIG_HAVE_BPF_JIT=y# [optional, for kprobes] CONFIG_BPF_EVENTS=y
要检查你的核心标志,查看文件了/proc/config.gz或在下面的例子中运行命令:
howtoing@HowToing ~ $ grep CONFIG_BPF= /boot/config-`uname -r` CONFIG_BPF=yhowtoing@HowToing ~ $ grep CONFIG_BPF_SYSCALL= /boot/config-`uname -r`CONFIG_BPF_SYSCALL=y howtoing@HowToing ~ $ grep CONFIG_NET_CLS_BPF= /boot/config-`uname -r` CONFIG_NET_CLS_BPF=m howtoing@HowToing ~ $ grep CONFIG_NET_ACT_BPF=/boot/config-`uname -r` CONFIG_NET_ACT_BPF=m howtoing@HowToing ~ $ grep CONFIG_BPF_JIT= /boot/config-`uname -r` CONFIG_BPF_JIT=y howtoing@HowToing ~ $ grep CONFIG_HAVE_BPF_JIT= /boot/config-`uname -r` CONFIG_HAVE_BPF_JIT=y howtoing@HowToing ~$ grep CONFIG_BPF_EVENTS= /boot/config-`uname -r` CONFIG_BPF_EVENTS=y
验证内核标志后,它的时间在Linux系统中安装BCC工具。
在Ubuntu 16.04
只有夜间包的Ubuntu 16.04创建,但安装说明都非常简单。无需内核升级或从源代码编译。
$ echo "deb [trusted=yes] https://repo.iovisor.org/apt/xenial xenial-nightly main" |sudo tee /etc/apt/sources.list.d/iovisor.list $ sudo apt-get update $ sudo apt-getinstall bcc-tools
在Ubuntu 14.04
通过安装4.3以上版本的 Linux内核,从开始http://kernel.ubuntu.com/~kernel-ppa/mainline 。
作为一个例子,写一个小的shell脚本“bcc-install.sh”与下面的内容。
注意 :更新PREFIX值的最晚日期,以及浏览提供获得实际的REL值,在shell脚本代替它们的前缀网址的文件。
#!/bin/bash VER=4.5.1-040501 PREFIX=http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.5.1-wily/ REL=201604121331 wget ${PREFIX}/linux-headers-${VER}-generic_${VER}.${REL}_amd64.deb wget ${PREFIX}/linux-headers-${VER}_${VER}.${REL}_all.deb wget ${PREFIX}/linux-image-${VER}-generic_${VER}.${REL}_amd64.deb sudo dpkg -i linux-*${VER}.${REL}*.deb
保存文件并退出。使其可执行,然后如图所示运行:
$ chmod +x bcc-install.sh $ sh bcc-install.sh
然后,重新启动系统。
$ reboot
接下来,运行以下命令安装签名的BCC软件包:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D4284CDD $ echo "deb https://repo.iovisor.org/apt trusty main" | sudo tee /etc/apt/sources.list.d/iovisor.list $ sudo apt-get update $ sudo apt-get install binutils bcc bcc-tools libbcc-examples python-bcc
在Fedora 24-23
安装从4.2+内核http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug ,如果您的系统具有比需要什么更低版本。下面是一个如何做的例子:
$ sudo dnf config-manager --add-repo=http://alt.fedoraproject.org/pub/alt/rawhide-kernel-nodebug/fedora-rawhide-kernel-nodebug.repo $ sudo dnf update $ reboot
在此之后,添加BBC工具库,更新你的系统,并执行下一个命令系列的安装工具:
$ echo -e '[iovisor]\nbaseurl=https://repo.iovisor.org/yum/nightly/f23/$basearch\nenabled=1\ngpgcheck=0' | sudo tee /etc/yum.repos.d/iovisor.repo $ sudo dnf update $ sudo dnf install bcc-tools
Arch Linux – AUR
您应该将内核升级到至少4.3.1-1版本开始,随后安装使用以下任何拱包管理器,如包pacaur,yaourt, 畏缩等。
bcc bcc-tools python-bcc python2-bcc
如何在Linux系统中使用BCC工具
所有BCC工具将被安装/usr/share/bcc/tools目录下。 但是,您可以替代地根据BCC Github上库运行它们/tools在那里他们有结束.py扩展。
$ ls /usr/share/bcc/tools argdist capable filetop offwaketime stackcount vfscount bashreadline cpudist funccount old stacksnoop vfsstat biolatency dcsnoop funclatency oomkill statsnoop wakeuptime biosnoop dcstat gethostlatency opensnoop syncsnoop xfsdist biotop doc hardirqs pidpersec tcpaccept xfsslower bitesize execsnoop killsnoop profile tcpconnect zfsdist btrfsdist ext4dist mdflush runqlat tcpconnlat zfsslower btrfsslower ext4slower memleak softirqs tcpretrans cachestat filelife mysqld_qslower solisten tplist cachetop fileslower offcputime sslsniff trace
我们应包括以下几个例子-监测的一般Linux系统的性能和网络。
跟踪open()系统调用
让我们通过追踪所有启动open()使用opensnoop系统调用。这使我们能够通过识别他们的数据文件,配置文件等等告诉我们各种应用程序如何工作:
$ cd /usr/share/bcc/tools $ sudo ./opensnoop PID COMM FD ERR PATH 1 systemd 35 0/proc/self/mountinfo 2797 udisksd 13 0 /proc/self/mountinfo 1 systemd 35 0/sys/devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0/block/sda/sda1/uevent 1 systemd 35 0 /run/udev/data/b8:1 1 systemd -1 2 /etc/systemd/system/sys-kernel-debug-tracing.mount 1 systemd -1 2 /run/systemd/system/sys-kernel-debug-tracing.mount 1systemd -1 2 /run/systemd/generator/sys-kernel-debug-tracing.mount 1 systemd -1 2/usr/local/lib/systemd/system/sys-kernel-debug-tracing.mount 2247 systemd 15 0/proc/self/mountinfo 1 systemd -1 2 /lib/systemd/system/sys-kernel-debug-tracing.mount 1systemd -1 2 /usr/lib/systemd/system/sys-kernel-debug-tracing