【linux内核】 BCC Tools命令汇总

news/2024/11/8 19:25:13/文章来源:https://www.cnblogs.com/o-O-oO/p/18535748

什么是BCC Tools

直接通过BPF指令编写BPF 程序是非常繁琐的事情,尤其对于运维人员来说,花70%的时间来编写一个BPF程序来实现一个检查点,不如花70%的时间来熟悉别人已经写好的BPF程序,并且把别人的BPF程序有效的串联起来形成自己分析问题的套路,等有了闲暇时间再去尝试突破自己,写一些现有BPF程序满足不了的额外需求。

因此针对BPF程序,提供了两种支持支持高级编程语言的BPF前端,在跟踪用途方面,主要为BCC和ftrace。

BCC(BPF 编译器集合,BPF Compiler Collection)是最早用于开发 BPF 跟踪程序的高级框架。它提供了一个编写内核 BPF 程序的C语言环境,同时还提供了其他高级语言(如Python、Lua和C++)环境来实现用户端接口。它也是

libbcc和libbpf库'的前身,这两个库提供了使用BPF 程序对事件进行观测的库函数。

当前版本的BCC Tool中提供了120多个BPF工具命令,可以用来支持性能分析和排障工作。

BCC的github地址:

https://github.com/iovisor/bcc/tree/master/tools  

BCC Tools安装

在配置yum源的情况下,安装非常简单。

[root@server02 ~]# yum -y install bcc-tools
......
Installing:bcc-tools                                                      x86_64                                      0.23.0-1.r2.hce2                                                        updates                                      454 k
......                                                                                                                                                       12/12 Installed:bcc-0.23.0-1.r2.hce2.x86_64                bcc-tools-0.23.0-1.r2.hce2.x86_64        clang-12.0.1-1.r3.hce2.x86_64                          clang-resource-filesystem-12.0.1-1.r3.hce2.x86_64   compiler-rt-12.0.1-1.hce2.x86_64   emacs-filesystem-1:27.2-3.r7.hce2.noarch   gcc-c++-10.3.1-10.r18.hce2.x86_64        kernel-devel-5.10.0-182.0.0.95.r1941_123.hce2.x86_64   libstdc++-devel-10.3.1-10.r18.hce2.x86_64           llvm-libs-12.0.1-2.r1.hce2.x86_64  python3-bpfcc-0.23.0-1.r2.hce2.noarch      python3-netaddr-0.8.0-3.r1.hce2.noarch  Complete![root@server02 ~]# rpm -qa | grep bcc-tool
bcc-tools-0.23.0-1.r2.hce2.x86_64

安装问题解决

使用BCC工具报错

顺利完成BCC-tool工具安装后,执行命令报错,如下

[root@server02 ~]# /usr/share/bcc/tools/execsnoop
modprobe: FATAL: Module kheaders not found in directory /lib/modules/5.10.0-60.18.0.50.r1083_58.hce2.x86_64
Unable to find kernel headers. Try rebuilding kernel with CONFIG_IKHEADERS=m (module) or installing the kernel development package for your running kernel version.
chdir(/lib/modules/5.10.0-60.18.0.50.r1083_58.hce2.x86_64/build): No such file or directory
Traceback (most recent call last):File "/usr/share/bcc/tools/execsnoop", line 227, in <module>b = BPF(text=bpf_text)File "/usr/lib/python3.9/site-packages/bpfcc/__init__.py", line 479, in __init__raise Exception("Failed to compile BPF module %s" % (src_file or "<text>"))
Exception: Failed to compile BPF module <text>

经过对报错内容进行排查确认,此类报错一般就是需要更新内核模块

内核升级

根据报错提示内容“ kheaders not found in directory”,先安装kernel header (yum -y install kernel-headers),其次安装kernel-devel安装包(yum -y install kernel-devel-$(uname -r))。

[root@server02 ~]# yum -y install kernel-headers
Last metadata expiration check: 0:51:49 ago on Mon 15 Jul 2024 03:42:51 PM CST.
Package kernel-headers-5.10.0-182.0.0.95.r1941_123.hce2.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@server02 ~]# yum -y install kernel-devel-$(uname -r)
......
Total download size: 17 M
Downloading Packages:
kernel-devel-5.10.0-60.18.0.50.r1083_58.hce2.x86_64.rpm  
Installed:kernel-devel-5.10.0-60.18.0.50.r1083_58Complete!

使用验证

[root@server02 ~]# /usr/share/bcc/tools/opensnoop
PID    COMM               FD ERR PATH
775    hostwatch           5   0 /proc/775/stat
775    hostwatch           5   0 /proc/804/stat
775    hostwatch           5   0 /usr/local/hostguard/run/heartbeat.tick
775    hostwatch           5   0 /proc/1659/stat
775    hostwatch           5   0 /sys/devices/system/cpu/online
775    hostwatch           5   0 /usr/local/hostguard/run/restart.conf
775    hostwatch           5   0 /proc/meminfo
670    irqbalance          7   0 /proc/irq/affinity_hint_notify
670    irqbalance          7   0 /proc/irq/affinity_hint_notify
775    hostwatch           5   0 /proc/775/stat
775    hostwatch           5   0 /proc/804/stat
775    hostwatch           5   0 /usr/local/hostguard/run/heartbeat.tick
775    hostwatch           5   0 /proc/1659/stat
775    hostwatch           5   0 /sys/devices/system/cpu/online
775    hostwatch           5   0 /usr/local/hostguard/run/restart.conf
775    hostwatch           5   0 /proc/meminfo

BCC命令汇总

bcc tools中,总计有124个命令,涉及到十个方面。


经过分类,大致命令和对应的作用关系如下,后续等有时间,针对其中有价值的几个再重点分析一下。

如果有兴趣,所有命令的注解都可以自行在/usr/share/bcc/tools/doc下面找到对应的example.txt










原创 KennyQiu 运维成长手记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/828973.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20222311 2024-2025-1 《网络与系统攻防技术》实验四实验报告

1. 实验内容 1.1恶意代码文件类型标识、脱壳与字符串提取 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下: (1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具; (2)使用…

进销存系统怎么实施?进销存的实施流程解析

很多老板都知道,企业的日常运营中,进销存管理是至关重要的核心环节之一。它涉及到企业的采购、库存、销售等多个方面,直接影响企业的资金流动、库存控制及客户满意度。因此,如何有效实施进销存管理系统,已成为许多企业提升运营效率、降低成本、优化资源配置的重要任务。 随…

解决centos7.9镜像问题

解决方案 https://wiki.bafangwy.com/doc/719/ 安装chrome(https://www.cnblogs.com/zxqblogrecord/p/13171516.html)时出现以下问题: failure: repodata/repomd.xml from centos7: [Errno 256] No more mirrors to try. http://mirror.centos.org/centos/7/os/x86_64/repodat…

【IDEA】IntelliJ IDEA远程开发:释放本地设备,打破资源与环境的限制

IDEA的远程开发 (Remote Development) 是指在不依赖于本地计算资源的情况下,通过连接远程服务器或虚拟机来进行代码编写、调试和构建的开发模式。这种方式主要通过 JetBrains Gateway 和 JetBrains Projector 提供支持,可以在本地 IDE 界面与远程环境紧密协作,帮助开发者解决…

有哪些免费的轻量级在线 CRM 系统?6款CRM系统盘点

对于许多中小型企业和初创公司而言,如何选择一款既能满足日常需求又具性价比的CRM系统很重要。通常来说,系统的成本是企业选型过程中不可忽视的因素,但在这么多的CRM系统中,各类CRM系统的功能与价格对比真的很容易让人眼花缭乱。 本文将盘6款值得关注的免费轻量级在线CRM系…

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 打开文件发现提示信息“备份文件”,查看源码并未发现其他有效信息采用dirsearch爆破目录,找到www.zip文件解压zip,发现是源码泄露提交flag,发现不正确,看到index.php源码中有Get传参,然后反序列化函数unserialize(),判断为反序列化漏洞;查看class…

【IDEA】告别繁琐反编译:IDEA中轻松反编译与修改Jar包

本文带你了解 JarEditor 插件的强大功能,它让你无语再用其他第三方工具,也无需解压 JAR 文件就能直接在IDEA中编辑其中的类和资源文件。还能用它轻松添加、删除或重命名 JAR 包里的文件。即使遇到混淆过的 JAR,JarEditor 也能通过 Javassist 工具搞定。 支持的功能 JarEdito…

[极客大挑战 2019]BuyFlag 1

[极客大挑战 2019]BuyFlag 1 打开实例发现pay.php页面,有提示信息打开源码发现password post提交逻辑burpsuite抓包传参,传入money和password参数,这里password是==弱比较,所以加个字符就可以绕过 password=404a&money=100000000回显发现并没有变化 注意到学生需要CUIT(…

写什么代码来清空缓冲区

在 C++ 中,清空输入缓冲区的方法主要用于清除 std::cin 输入流中的残留字符,避免它们影响后续的输入操作。下面介绍几种常用的办法。 1. cin.ignore() 方法 cin.ignore() 是最常用的清空缓冲区方法,可以忽略输入流中的若干字符。cin.ignore(numeric_limits<streamsize>…

[ACTF2020 新生赛]BackupFile 1

[ACTF2020 新生赛]BackupFile 1 打开实例,显示Try to find out source file!(尝试找出源文件!)dirsearch扫描,发现flag页面以及备份文件泄露wget下载并打开index.php.bak,发现flag.php的源码这边要求参数key为数值的同时又要==123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w…

【架构】异地多活架构设计

一、关于基础架构二、关于异地多活三、写时延是关键3.1 核心在于数据层的写操作3.2 写时延在跨城时发生质变3.3 同步复制缩短距离降目标3.4 异步复制就近分片做有损四、写量大拆分片五、做隔离拆分片六、其他影响因素6.1 读时延可就近6.2 读量大扩副本6.3 连接多加代理七、数据…