1.简介
提到 bcc-tools 就不得不提 bpftrace,bpftrace 是基于 BPF 和 BCC 的开源系统跟踪工具。bpftrace 堪称 Linux 性能诊断的屠龙刀,但是不是谁都能用得好。而 bcc-tools 就是牛人写的 bpftrace 脚本,针对不同问题的一个工具包。
如果要详细了解 bpftrace 和性能诊断,可阅读《BPF之巅 洞悉Linux系统和应用性能》和《性能之巅 洞悉系统、企业和云计算》
云盘下载见文章最后。
2.安装
2.1.CentOS7 安装
从 RHEL 8 开始,BPF 已放到官方源。
wget https://repos.baslab.org/rhel/7/bpftools/bpftools.repo -O /etc/yum.repos.d/bpftools.repo --no-check-certificate
yum -y install bpftrace
yum -y install kernel-headers
yum -y install bcc-tools
2.2.Ubuntu20 安装
Ubuntu 已将 BPF 工具放到官方源。
apt install -y bpftrace
apt install -y bpfcc-tools
3.示例
随便举两个例子,以后有时间会把每个工具介绍一遍。
3.1.execsnoop
通过跟踪每次execve系统调用,打印每个新创建的进程。
我们可以使用这个工具,跟踪一个脚本到底在做什么。虽然阅读代码也能了解,但是不如直接看执行过程更直接。
比如 TDengine 的安装脚本 install.sh 到底做了啥:
grep 56686 56674 0 /usr/bin/grep -qwi debian
grep 56688 56674 0 /usr/bin/grep -qwi Kylin
grep 56690 56674 0 /usr/bin/grep -qwi Red
grep 56692 56674 0 /usr/bin/grep -qwi centos
hostname 56694 56674 0 /usr/bin/hostname
tar 56695 56674 0 /usr/bin/tar -zxf taos.tar.gz
gzip 56696 56695 0 /usr/bin/gzip -d
sudo 56698 56674 0 /usr/bin/sudo rm -rf /usr/local/taos
rm 56699 56698 0 /bin/rm -rf /usr/local/taos
sudo 56700 56674 0 /usr/bin/sudo mkdir -p /usr/local/taos
mkdir 56701 56700 0 /bin/mkdir -p /usr/local/taos
sudo 56702 56674 0 /usr/bin/sudo mkdir -p /usr/local/taos/cfg
mkdir 56703 56702 0 /bin/mkdir -p /usr/local/taos/cfg
sudo 56704 56674 0 /usr/bin/sudo mkdir -p /usr/local/taos/bin
mkdir 56705 56704 0 /bin/mkdir -p /usr/local/taos/bin
sudo 56706 56674 0 /usr/bin/sudo mkdir -p /usr/local/taos/driver
mkdir 56707 56706 0 /bin/mkdir -p /usr/local/taos/driver
sudo 56708 56674 0 /usr/bin/sudo mkdir -p /usr/local/taos/examples
mkdir 56709 56708 0 /bin/mkdir -p /usr/local/taos/examples
sudo 56710 56674 0 /usr/bin/sudo mkdir -p /usr/local/taos/include
mkdir 56712 56710 0 /bin/mkdir -p /usr/local/taos/include
sudo 56713 56674 0 /usr/bin/sudo mkdir -p /usr/local/nginxd
mkdir 56714 56713 0 /bin/mkdir -p /usr/local/nginxd
sudo 56715 56674 0 /usr/bin/sudo mkdir -p /var/lib/taos
mkdir 56716 56715 0 /bin/mkdir -p /var/lib/taos
sudo 56717 56674 0 /usr/bin/sudo ln -s /var/lib/taos /usr/local/taos/data
ln 56718 56717 0 /bin/ln -s /var/lib/taos /usr/local/taos/data
sudo 56719 56674 0 /usr/bin/sudo rm -rf /var/log/taos
rm 56720 56719 0 /bin/rm -rf /var/log/taos
.....
cp 56800 56799 0 /bin/cp -rf /tmp/TDengine-enterprise-server-2.4.0.31/connector/ /usr/local/taos/
sudo 56801 56674 0 /usr/bin/sudo cp -rf /tmp/TDengine-enterprise-server-2.4.0.31/examples/c /tmp/TDengine-enterprise-server-2.4.0.31/examples/C# /tmp/TDengine-enterprise-server-2.4.0.31/examples/go /tmp/TDengine-enterprise-server-2.4.0.31/examples/JDBC /tmp/TDengine-enterprise-server-2.4.0.31/examples/matlab /tmp/TDengine-enterprise-server-2.4.0.31/examples/nodejs /tmp/TDengine-enterprise-server-2.4.0.31/examples/python /tmp/TDengine-enterprise-server-2.4.0.31/examples/R /tmp/TDengine-enterprise-server-2.4.0.31/examples/taosbenchmark-json /usr/local/taos/examples
cp 56802 56801 0 /bin/cp -rf /tmp/TDengine-enterprise-server-2.4.0.31/examples/c /tmp/TDengine-enterprise-server-2.4.0.31/examples/C# /tmp/TDengine-enterprise-server-2.4.0.31/examples/go /tmp/TDengine-enterprise-server-2.4.0.31/examples/JDBC /tmp/TDengine-enterprise-server-2.4.0.31/examples/matlab /tmp/TDengine-enterprise-server-2.4.0.31/examples/nodejs /tmp/TDengine-enterprise-server-2.4.0.31/examples/python /tmp/TDengine-enterprise-server-2.4.0.31/examples/R /tmp/TDengine-enterprise-server-2.4.0.31/examples/taosbenchmark-json /usr/local/taos/examples
sudo 56803 56674 0 /usr/bin/sudo rm -f /usr/bin/taos
rm 56805 56803 0 /bin/rm -f /usr/bin/taos
sudo 56806 56674 0 /usr/bin/sudo rm -f /usr/bin/taosd
rm 56807 56806 0 /bin/rm -f /usr/bin/taosd
sudo 56808 56674 0 /usr/bin/sudo rm -f /usr/bin/taosadapter
rm 56809 56808 0 /bin/rm -f /usr/bin/taosadapter
sudo 56810 56674 0 /usr/bin/sudo rm -f /usr/bin/rmtaos
rm 56811 56810 0 /bin/rm -f /usr/bin/rmtaos
sudo 56812 56674 0 /usr/bin/sudo rm -f /usr/bin/tarbitrator
rm 56813 56812 0 /bin/rm -f /usr/bin/tarbitrator
sudo 56814 56674 0 /usr/bin/sudo rm -f /usr/bin/set_core
rm 56815 56814 0 /bin/rm -f /usr/bin/set_core
sudo 56816 56674 0 /usr/bin/sudo rm -f /usr/bin/run_taosd_and_taosadapter.sh
rm 56817 56816 0 /bin/rm -f /usr/bin/run_taosd_and_taosadapter.sh
sudo 56818 56674 0 /usr/bin/sudo rm -f /usr/bin/TDinsight.sh
rm 56819 56818 0 /bin/rm -f /usr/bin/TDinsight.sh
sudo 56820 56674 0 /usr/bin/sudo cp -r /tmp/TDengine-enterprise-server-2.4.0.31/bin/remove.sh /tmp/TDengine-enterprise-server-2.4.0.31/bin/run_taosd_and_taosadapter.sh /tmp/TDengine-enterprise-server-2.4.0.31/bin/set_core.sh /tmp/TDengine-enterprise-server-2.4.0.31/bin/startPre.sh /tmp/TDengine-enterprise-server-2.4.0.31/bin/taos /tmp/TDengine-enterprise-server-2.4.0.31/bin/taosadapter /tmp/TDengine-enterprise-server-2.4.0.31/bin/taosBenchmark /tmp/TDengine-enterprise-server-2.4.0.31/bin/taosd /tmp/TDengine-enterprise-server-2.4.0.31/bin/taosd-dump-cfg.gdb /tmp/TDengine-enterprise-server-2.4.0.31/bin/taosdump /tmp/TDengine-enterprise-server-2.4.0.31/bin/taoskeeper /tmp/TDengine-enterprise-server-2.4.0.31/bin/tarbitrator /tmp/TDengine-enterprise-server-2.4.0.31/bin/tdengine-datasource-3.2.5.zip /tmp/TDengine-enterprise-server-2.4.0.31/bin/TDinsight-15167.json /tmp/TDengine-enterprise-server-2.4.0.31/bin/TDinsight.sh /usr/local/taos/bin
.....
3.2.opensnoop
通过跟踪每次open系统调用,打印进程名和文件名。
也以 TDengine 为例,查看进程启动时,打开了哪些文件:
57439 taosd 3 0 /etc/ld.so.cache
57439 taosd 3 0 /usr/local/lib/libjemalloc.so.2
57439 taosd 3 0 /lib64/libdl.so.2
57439 taosd 3 0 /lib/libtaos.so.1
57439 taosd 3 0 /lib64/libm.so.6
57439 taosd 3 0 /lib64/librt.so.1
57439 taosd 3 0 /lib64/libpthread.so.0
57439 taosd 3 0 /lib64/libc.so.6
57439 taosd 3 0 /lib64/libstdc++.so.6
57439 taosd 3 0 /lib64/libgcc_s.so.1
57439 taosd 3 0 /proc/sys/vm/overcommit_memory
57439 taosd 3 0 /sys/kernel/mm/transparent_hugepage/enabled
57439 taosd 4 0 /etc/localtime
57439 taosd 4 0 /dev/urandom
57439 taosd 4 0 /etc/taos/taos.cfg
57439 taosd 4 0 /proc/cpuinfo
57439 taosd 4 0 /taos/log/taosdlog.0
57439 taosd 5 0 /etc/taos/taos.cfg
......
57439 taosd 5 0 /taos/log/taosinfo.0
57439 taosd 6 0 /tmp/
57439 taosd 6 0 /sys/devices/system/cpu/online
57439 taosd 6 0 /proc/meminfo
57439 taosd 6 0 /proc/meminfo
57439 taosd 6 0 /proc/57439/status
57439 taosd 6 0 /proc/net/dev
57439 taosd 6 0 /proc/stat
57439 taosd 6 0 /proc/57439/stat
57439 taosd 6 0 /proc/57439/io
57439 taosd -1 2 /etc/timezone
57439 taosd 6 0 /usr/lib/locale/locale-archive
57439 taosd 6 0 /usr/lib64/gconv/gconv-modules.cache
57439 taosd 6 0 /taos/data/vnode_bak/.staging
57439 taosd 6 0 /taos/data/dnode/.running
57439 taosd 7 0 /taos/data/dnode/dnodeCfg.json
57439 taosd 7 0 /taos/data/dnode/dnodeCfg.json
57439 taosd 7 0 /taos/data/dnode/dnodeEps.json
57439 taosd 7 0 /taos/data/dnode/mnodeEpSet.json
57439 taosd 9 0 /proc/meminfo
57439 taosd 15 0 /taos/data/vnode
57439 dnodeOpenVnode 15 0 /taos/data/vnode/vnode9/config.json
57439 dnodeOpenVnode 15 0 /taos/data/vnode/vnode4/config.json
57439 dnodeOpenVnode 16 0 /taos/data/vnode/vnode9/version.json
57439 dnodeOpenVnode 15 0 /taos/data/vnode/vnode4/version.json
57439 dnodeOpenVnode 15 0 /taos/data/vnode/vnode4/tsdb/current
57439 dnodeOpenVnode 15 0 /taos/data/vnode/vnode4/tsdb/data/v4f1736.head
57439 dnodeOpenVnode 16 0 /taos/data/vnode/vnode4/tsdb/data/v4f1736.data
57439 dnodeOpenVnode 17 0 /taos/data/vnode/vnode4/tsdb/data/v4f1736.last
4.分享
百度云盘
提取码: 3hcc