bcc入门教程


title: 入门教程
date: 2024-06-20T14:31:46Z
lastmod: 2024-06-21T04:12:43Z

入门教程

本教程仅包含怎样快速使用bcc工具解决性能、故障和网络问题。若想要开启开发新的bcc工具,请参考bcc教程。

本教程认为bcc已经安装,可以成功运行execsnoop命令。如果未安装,可以参考​安装教程​



0. bcc开始之前

使用bcc之前,我们应该从linux基础开始

uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top

1. 通用性能工具

这是一个通用的关于bcc 性能研究工具清单,然后详细说明:

execsnoop
opensnoop
ext4slower (or btrfs*, xfs*, zfs*)
biolatency
biosnoop
cachestat
tcpconnect
tcpaccept
tcpretrans
runqlat
profile

1.1 execsnoop

execsnoop逐行打印每一个新的进程的输出,检查短暂的进程。 这些可能会消耗CPU资源,但在大多数监测工具不显示,这些工具只是定期采取正在运行程序的快照。

它通过跟踪exec(), 不是 fork(),所以它将会捕捉多种类型的新建进程,但不是所有的(例如,它不会看到一个应用程序的启动工作流程,这并不exec()任何东西).

# ./execsnoop
PCOMM            PID    RET ARGS
supervise        9660     0 ./run
supervise        9661     0 ./run
mkdir            9662     0 /bin/mkdir -p ./main
run              9663     0 ./run
[...]

更多示例

1.2 opensnoop

opensnoop 用于打印每个open()系统调用,包括详细信息。

打开的文件可以告诉你很多关于应用如何工作:确定其文件的数据,配置文件和日志的文件。 有时应用程序可以胡作非为,并执行不佳,当它们不断试图读的文件不存在时,opensnoop可以快速查找一下。

# ./opensnoop
PID    COMM               FD ERR PATH
1565   redis-server        5   0 /proc/1565/stat
1565   redis-server        5   0 /proc/1565/stat
1565   redis-server        5   0 /proc/1565/stat
1603   snmpd               9   0 /proc/net/dev
1603   snmpd              11   0 /proc/net/if_inet6
1603   snmpd              -1   2 /sys/class/net/eth0/device/vendor
1603   snmpd              11   0 /proc/sys/net/ipv4/neigh/eth0/retrans_time_ms
1603   snmpd              11   0 /proc/sys/net/ipv6/neigh/eth0/retrans_time_ms
1603   snmpd              11   0 /proc/sys/net/ipv6/conf/eth0/forwarding
[...]

1.3. ext4slower (or btrfs*, xfs*, zfs*)

# ./ext4slower
Tracing ext4 operations slower than 10 ms
TIME     COMM           PID    T BYTES   OFF_KB   LAT(ms) FILENAME
06:35:01 cron           16464  R 1249    0          16.05 common-auth
06:35:01 cron           16463  R 1249    0          16.04 common-auth
06:35:01 cron           16465  R 1249    0          16.03 common-auth
06:35:01 cron           16465  R 4096    0          10.62 login.defs
06:35:01 cron           16464  R 4096    0          10.61 login.defs
ext4slower跟踪ext4文件系统和相同行为的时间,然后只打印那些超过某一阈值的进程。这用于识别性能问题是很有用的:显示慢I/O的文件系统。 磁盘处理异步I/O这种场景下就很难将应用延迟和磁盘IO关联起来。 在内核栈跟踪VFS->文件系统接口可以更深入观测到应用程序运行过程。 使用这个工具以识别文件系统中的等待时间是否超过阈值。类似的工具存在bcc其他文件系统:btrfsslower、xfsslower和zfsslower。fileslower工作在VFS层,可以跟踪一切(虽然在一些更高的开销)。

更多示例

1.4 biolatency

biolatency可以跟踪IO延迟(因为设备问题)。当命令执行结束后(Ctrl\-C,或者一段时间后),将会绘制延迟摘要直方图。这对于理解磁盘io延迟比iostat的平均时间更好。I/O延迟值以在结束时打印,也可以以其他形式输出。
# ./biolatency
Tracing block device I/O... Hit Ctrl-C to end.
^Cusecs           : count     distribution0 -> 1        : 0        |                                      |2 -> 3        : 0        |                                      |4 -> 7        : 0        |                                      |8 -> 15       : 0        |                                      |16 -> 31       : 0        |                                      |32 -> 63       : 0        |                                      |64 -> 127      : 1        |                                      |128 -> 255      : 12       |********                              |256 -> 511      : 15       |**********                            |512 -> 1023     : 43       |*******************************       |1024 -> 2047     : 52       |**************************************|2048 -> 4095     : 47       |**********************************    |4096 -> 8191     : 52       |**************************************|8192 -> 16383    : 36       |**************************            |16384 -> 32767    : 15       |**********                            |32768 -> 65535    : 2        |*                                     |

更多示例

1.5 biosnoop

biosnoop会逐行打印每个磁盘io,包含延迟等具体信息。这可以让你检查磁盘I/O更详细的细节,并寻找时序的模式(例如,读排队后面写). 输出将可以详细展示你的系统是否在进行高速率的磁盘IO。
# ./biosnoop
TIME(s)        COMM           PID    DISK    T  SECTOR    BYTES   LAT(ms)
0.000004001    supervise      1950   xvda1   W  13092560  4096       0.74
0.000178002    supervise      1950   xvda1   W  13092432  4096       0.61
0.001469001    supervise      1956   xvda1   W  13092440  4096       1.24
0.001588002    supervise      1956   xvda1   W  13115128  4096       1.09
1.022346001    supervise      1950   xvda1   W  13115272  4096       0.98
1.022568002    supervise      1950   xvda1   W  13188496  4096       0.93
[...]

更多示例

1.6 cachestat

cachestat每秒(或每隔一定时间间隔)打印统计文件系统的缓存统计。使用工具可以检测缓存命中率,以便进行性能调优。
# ./cachestatHITS   MISSES  DIRTIES  READ_HIT% WRITE_HIT%   BUFFERS_MB  CACHED_MB1074       44       13      94.9%       2.9%            1        2232195      170        8      92.5%       6.8%            1        143182       53       56      53.6%       1.3%            1        14362480    40960    20480      40.6%      19.8%            1        2237        2        5      22.2%      22.2%            1        223348        0        0     100.0%       0.0%            1        223
[...]

更多示例

1.7. tcpconnect

tcpconnect逐行打印每个活跃连接(connect())的详细信息,包括源目地址。查到不期望的连接可能是应用配置问题或者电脑被入侵。
# ./tcpconnect
PID    COMM         IP SADDR            DADDR            DPORT
1479   telnet       4  127.0.0.1        127.0.0.1        23
1469   curl         4  10.201.219.236   54.245.105.25    80
1469   curl         4  10.201.219.236   54.67.101.145    80
1991   telnet       6  ::1              ::1              23
2015   ssh          6  fe80::2000:bff:fe82:3ac fe80::2000:bff:fe82:3ac 22
[...]

更多示例

1.8 tcpaccept

tcpaccept用于打印每一个被动的TCP连接(例如,通过accept())详细信息,包括来源和目的地址。显示不期望的连接可能是应用配置问题或者电脑被入侵。
# ./tcpaccept
PID    COMM         IP RADDR            LADDR            LPORT
907    sshd         4  192.168.56.1     192.168.56.102   22
907    sshd         4  127.0.0.1        127.0.0.1        22
5389   perl         6  1234:ab12:2040:5020:2299:0:5:0 1234:ab12:2040:5020:2299:0:5:0 7001
[...]

更多示例

1.9 tcpretrans

tcprerans用于打印每一个TCP重发包详细信息,包括来源和目的地的地址和内核态的TCP连接。TCP重传会引起延迟和吞吐量的问题。 对ESTABLISHED重传,会使用网络进行寻找。 对于SYN_SENT状态,这可能造成目标CPU跑满和内核数据包丢失。
# ./tcpretrans
TIME     PID    IP LADDR:LPORT          T> RADDR:RPORT          STATE
01:55:05 0      4  10.153.223.157:22    R> 69.53.245.40:34619   ESTABLISHED
01:55:05 0      4  10.153.223.157:22    R> 69.53.245.40:34619   ESTABLISHED
01:55:17 0      4  10.153.223.157:22    R> 69.53.245.40:22957   ESTABLISHED
[...]

更多示例

1.10 runqlat

runqlat用于查看线程等待CPU上运行的队列多久,并打印本直方图。这可以帮助量化在CPU饱和期间等待CPU耗费时间。
# ./runqlat
Tracing run queue latency... Hit Ctrl-C to end.
^Cusecs               : count     distribution0 -> 1          : 233      |***********                             |2 -> 3          : 742      |************************************    |4 -> 7          : 203      |**********                              |8 -> 15         : 173      |********                                |16 -> 31         : 24       |*                                       |32 -> 63         : 0        |                                        |64 -> 127        : 30       |*                                       |128 -> 255        : 6        |                                        |256 -> 511        : 3        |                                        |512 -> 1023       : 5        |                                        |1024 -> 2047       : 27       |*                                       |2048 -> 4095       : 30       |*                                       |4096 -> 8191       : 20       |                                        |8192 -> 16383      : 29       |*                                       |16384 -> 32767      : 809      |****************************************|32768 -> 65535      : 64       |***                                     |

更多示例

1.11 profile

profile是一个CPU分析器,这需要在一定的时间间隔采样跟踪堆栈,并打印摘要堆栈跟踪信息和发生的次数。使用这个工具来了解代码消耗CPU资源的途径。
# ./profile
Sampling at 49 Hertz of all threads by user + kernel stack... Hit Ctrl-C to end.
^C00007f31d76c3251 [unknown]47a2c1e752bf47f7 [unknown]-                sign-file (8877)1ffffffff813d0af8 __clear_userffffffff813d5277 iov_iter_zeroffffffff814ec5f2 read_iter_zeroffffffff8120be9d __vfs_readffffffff8120c385 vfs_readffffffff8120d786 sys_readffffffff817cc076 entry_SYSCALL_64_fastpath00007fc5652ad9b0 read-                dd (25036)40000000000400542 func_a0000000000400598 main00007f12a133e830 __libc_start_main083e258d4c544155 [unknown]-                func_ab (13549)5[...]ffffffff8105eb66 native_safe_haltffffffff8103659e default_idleffffffff81036d1f arch_cpu_idleffffffff810bba5a default_idle_callffffffff810bbd07 cpu_startup_entryffffffff8104df55 start_secondary-                swapper/1 (0)75

更多示例

 execsnoop  -h
is name (regex), anyarg-l LINE, --line LINE  only print commands where arg contains this line(regex)-U, --print-uid       print UID column--max-args MAX_ARGS   maximum number of arguments parsed and displayed,defaults to 20examples:./execsnoop           # trace all exec() syscalls./execsnoop -x        # include failed exec()s./execsnoop -T        # include time (HH:MM:SS)./execsnoop -U        # include UID./execsnoop -u 1000   # only trace UID 1000./execsnoop -u user   # get user UID and trace only them./execsnoop -t        # include timestamps./execsnoop -q        # add "quotemarks" around arguments./execsnoop -n main   # only print command lines containing "main"./execsnoop -l tpkg   # only print command where arguments contains "tpkg"./execsnoop --cgroupmap mappath  # only trace cgroups in this BPF map./execsnoop --mntnsmap mappath   # only trace mount namespaces in the mapusage: execsnoop [-h] [-T] [-t] [-x] [--cgroupmap CGROUPMAP][--mntnsmap MNTNSMAP] [-u USER] [-q] [-n NAME] [-l LINE] [-U][--max-args MAX_ARGS]Trace exec() syscallsoptional arguments:-h, --help            show this help message and exit-T, --time            include time column on output (HH:MM:SS)-t, --timestamp       include timestamp on output-x, --fails           include failed exec()s--cgroupmap CGROUPMAPtrace cgroups in this BPF map only--mntnsmap MNTNSMAP   trace mount namespaces in this BPF map only-u USER, --uid USER   trace this UID only-q, --quote           Add quotemarks (") around arguments.-n NAME, --name NAME  only print commands matching this name (regex), anyarg-l LINE, --line LINE  only print commands where arg contains this line(regex)-U, --print-uid       print UID column--max-args MAX_ARGS   maximum number of arguments parsed and displayed,defaults to 20examples:./execsnoop           # trace all exec() syscalls./execsnoop -x        # include failed exec()s./execsnoop -T        # include time (HH:MM:SS)./execsnoop -U        # include UID./execsnoop -u 1000   # only trace UID 1000./execsnoop -u user   # get user UID and trace only them./execsnoop -t        # include timestamps./execsnoop -q        # add "quotemarks" around arguments./execsnoop -n main   # only print command lines containing "main"./execsnoop -l tpkg   # only print command where arguments contains "tpkg"./execsnoop --cgroupmap mappath  # only trace cgroups in this BPF map./execsnoop --mntnsmap mappath   # only trace mount namespaces in the map

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

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

相关文章

407串口01发送

实验一: 工程。 链接:https://pan.baidu.com/s/1g8DV4yZWOix0BbcZ08LYDQ?pwd2176 提取码:2176串口1的使用。发送功能。 单片机发送信息到电脑。 通过串口进行通信。 首先单片机这边。 单片机这边,需要对单片机的串口模块进行使…

zctf2016_note2-堆利用-unlink

一、题目 题目:zctf2016_note2 题目描述:二、WriteUp (一)题目环境 glibc版本2.23 通过patchelf进行修改(二)信息收集 $ checksec note2Arch: amd64-64-littleRELRO: Partial RELRO # (.plt.got)段依…

一些宏观理解

跳板机(Jump Server) 跳板机是一种中间服务器,用于在用户与目标服务器之间提供一个安全的访问点。它通常用于增强安全性,通过跳板机可以控制和审计对目标服务器的访问。用户首先连接到跳板机,然后从跳板机连接到目标服…

Redis-HyperLogLog数据类型及其常用命令详解

1.Redis概述 2.HyperLogLog数据类型 HyperLogLog(HLL)是一种用于近似计算大数据集合中唯一元素数量(基数)的概率性数据结构。 概率数据结构: HyperLogLog 使用的是一种概率算法,它可以在极少的内存消耗下估…

SpringBoot2+Vue3开发博客管理系统

项目介绍 博客管理系统,可以帮助使用者管理自己的经验文章、学习心得、知识文章、技术文章,以及对文章进行分类,打标签等功能。便于日后的复习和回忆。 架构介绍 博客管理系统采用前后端分离模式进行开发。前端主要使用技术:Vu…

黑龙江等保测评的具体流程是怎样的

黑龙江等保测评的具体流程 黑龙江等保测评是根据《中华人民共和国网络安全法》及相关法律法规,对信息系统安全保护能力进行评估和验证的过程。以下是黑龙江等保测评的具体流程: 系统定级:根据业务、资产、安全技术、安全管理等方面的情况&am…

鸿蒙HarmonyOS服务卡片实战

引言 在现代开发中,服务卡片是不可或缺的一部分,比如音乐,天气类等应用,官网的介绍中写道:卡片让您便捷地预览服务信息,例如查看天气或日历日程等内容。您可将卡片添加到屏幕上,让这类信息触手…

[C++][设计模式][观察者模式]详细讲解

目录 1.动机2.模式定义3.要点总结4.代码感受1.代码一1.FileSplitter.cpp2.MainForm.cpp 2.代码二1.FileSplitter.cpp2.MainForm.cpp 1.动机 在软件构建过程中,需要为某些对象建立一种“通知依赖关系” 一个对象(目标对象)的状态发生改变,所有的依赖对象…

2024.6.22刷题记录-力扣周赛402跟练记录(未完)

目录 一、跟练视频 二、3184. 构成整天的下标对数目 I 暴力 三、3185. 构成整天的下标对数目 II 不会,来自视频。 一、跟练视频 【值域打家劫舍 树状数组【力扣周赛 402】-哔哩哔哩】 https://b23.tv/iDc49pt 二、3184. 构成整天的下标对数目 I 暴力 class …

C语言 将“China”译成密码

将“China”译成密码,密码规律是:用原来的字母后面的第4个字母代替原来的字母。例如,字母“A”后面的第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。编译程序用付赋初值的方法使c1,c…

Clickhouse 的性能优化实践总结

文章目录 前言性能优化的原则数据结构优化内存优化磁盘优化网络优化CPU优化查询优化数据迁移优化 前言 ClickHouse是一个性能很强的OLAP数据库,性能强是建立在专业运维之上的,需要专业运维人员依据不同的业务需求对ClickHouse进行有针对性的优化。同一批…

9、PHP 实现调整数组顺序使奇数位于偶数前面

题目: 调整数组顺序使奇数位于偶数前面 描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分, 所有的偶数位于位于数组的后半部分,并保证奇数和奇数&#xff…

基于深度学习的旋转包围盒检测

基于深度学习的旋转包围盒检测 旋转包围盒检测是一种高级目标检测方法,旨在识别图像中目标的精确位置和方向。与传统的轴对齐矩形框(水平包围盒)不同,旋转包围盒(Rotated Bounding Box, RBB)允许检测框随目…

速盾:视频cdn和网站cdn的区别

在互联网的发展过程中,视频的重要性越来越被人们所重视,视频内容的传播和观看需求也越来越大。为了提供更好的用户体验和满足视频内容的高负载需求,加快视频的加载速度,视频CDN(Content Delivery Network,内…

一、企业级架构设计-archimate基础概念

目录 一、标准 二、实现工具 1、Archimate 1、Archimate 基本概念 1、通用元模型 2、结构关系 3、依赖关系 1、服务关系 2、访问关系 3、影响关系 1、影响方式 2、概念 3、关系线 4、案例 4、关联关系 4、动态、节点和其他关系 1、时间或因果关系 2、信息流 …

缓存层持久化

** 读缓存** 分布式缓存 先将所有的缓存数据集中存储在同一个地方,而非重复保存到各个服务器节点中,然后所有的服务器节点都从这个地方读取数据 使用MongoDB的公司最少,目前,Redis比Memcached更流行: (1&…

MySQL——Insert语句详解

语法: INSERT INTO 表名([字段名1,字段名2,字段名3])VALUES(值1),(值2),(值3), 注意事项: 字段和字段之间,使用英文逗号隔开 字段是可以省略的,但是后面的值必须一一对应&…

采集数据类型和方法

采集的类型: 命名实体:命名实体包括人名、地点、组织、时间表达式、数量等。这些实体通常对理解和分类文本内容至关重要。 关键词和短语:这些是文本中的核心概念,可能代表了主题或中心思想。 句子或段落:根据需求,可…

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 …

【深度学习】Position Wise 到底是什么,有什么用

1. 遇到的问题 今天在看 Transformers 的前生今世 的时候,又一次看到了 Position Wise ,经常看到但老是一知半解,故索性查了一下,发现网上的都没怎么细讲其缘由,有点差强人意,于是我又用咱们最喜欢的 GPT-…