bcc-tools Linux运维中的要你命3000

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA大董

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值