eBPF监控工具bcc系列四工具argdist

简介:

argdist工具用于探测指定的函数,并收集参数到一个直方图和频率计数器。可以在没有调试器的情况下,过滤并打印敢兴趣的参数,从而理解指定参数的分布图。

例如像知道一个应用中的内存分配块大小情况,可以指向如下:

./argdist -p 2420 -c -C 'p:c:malloc(size_t size):size_t:size'

如果要变成柱状图,参数修改成-H即可。

./argdist -p 2420 -c -H 'p:c:malloc(size_t size):size_t:size'

其他函数同理:

./argdist -c -H 'p:c:write(int fd, void *buf, size_t len):size_t:len'

这个write的跟踪中,因为系统中的write会被很多进程调用,如果先想执行写到STDOUT中的write。那么可以增加过滤条件如下:

./argdist -c -H 'p:c:write(int fd, void *buf, size_t len):size_t:len:fd==1'

            更进一步的,用户的内存分配函数是malloc,在内核态也有一个和它对应的函数叫做kmalloc函数,可以使用如下:

./argdist -i 3 -n 2 -H 'p::__kmalloc(size_t size):size_t:size'

            跟踪字符串打印函数:

./argdist -i 10 -n 1 -C 'p:c:puts(char *str):char*:str'

            这个命令会输出10秒内字符串函数puts调用的次数和内容。

如果是gets函数,则使用如下命令:

./argdist -i 10 -n 1 -C 'r:c:gets():char*:(char*)$retval:$retval!=0'

同理,如果要得到read函数返回的直方图,使用如下命令

./argdist -i 10 -c 1 -H 'r:c:read()'

            更进一步找到同步延时超过0.1ms的进程

./argdist -C 'r::__vfs_read():u32:$PID:$latency > 100000'

计算malloc分配每个字节的时间

./argdist -H 'r:c:malloc(size_t size):u64:$latency/$entry(size);ns per byte' -n 1 -i 10

也可以跟踪kmalloc函数

./argdist -c -C 'p::__kmalloc(size_t size, gfp_t flags):gfp_t,size_t:flags,size'

argdist支持kernel tracepoints,内核版本之间的tracepoints变化很小,鼓励使用tracepoints.

 

 

使用argdist跟踪内核的tracepoints如下:

argdist -C 't:net:net_dev_start_xmit():u16:args->protocol'

argdist可以使用STRCMP函数来支持过滤,如下:

argdist -c -H 'r:c:open(char *file):u64:$latency/1000:STRCMP("test.txt",$entry(file))'

最后一个样例,超出系统中每个进程调用write的次数

argdist -c -C 'p:c:write():int:$PID;write per process' -n 2

 

 

目录
相关文章
|
监控 调度 开发工具
IO神器blktrace使用介绍
## 前言 1. blktrace的作者正是block io的maintainer,开发此工具,可以更好的追踪IO的过程。 2. blktrace 结合btt可以统计一个IO是在调度队列停留的时间长,还是在硬件上消耗的时间长,利用这个工具可以协助分析和优化问题。 ## blktrace的原理 一个I/O请求的处理过程,可以梳理为这样一张简单的图: ![](http://image
19446 0
|
6月前
|
存储 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
日前,阿里云PolarDB云原生数据库以超越原记录2.5倍的性能一举登顶TPC-C基准测试排行榜,以每分钟20.55亿笔交易(tpmC)和单位成本0.8元人民币(price/tpmC)的成绩刷新TPC-C性能和性价比双榜的世界纪录。 每一个看似简单的数字背后,都蕴含着无数技术人对数据库性能、性价比和稳定性的极致追求,PolarDB的创新步伐从未止步。「阿里云瑶池数据库」公众号特此推出「PolarDB登顶TPC-C技术揭秘」系列硬核文章,为你讲述“双榜第一”背后的故事,敬请关注!
登顶TPC-C|云原生数据库PolarDB技术揭秘:单机性能优化篇
|
11月前
|
安全 数据管理 定位技术
CDGA|自然资源数据治理五部曲,实现数据融合关联、共享可用
在自然资源行业,数据治理是自然资源信息化的工作基础,是推进自然资源治理体系和治理能力现代化进程的必经之路。
|
Kubernetes Nacos 微服务
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
301 1
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
|
Linux 数据处理 vr&ar
Linux下的ranlib命令:静态库文件的索引生成器
`ranlib`是Linux用于加速静态库(.a文件)链接的工具,它生成索引以优化查找目标文件。当链接器处理静态库时,索引能快速定位目标,提升效率。命令如`ranlib libexample.a`创建索引。注意,新工具链可能已自动包含此功能,使用前应确保库文件未含索引,避免重复生成。
|
Java 开发者
Java IO流实战技巧:如何优化InputStream/OutputStream和Reader/Writer的使用?
【6月更文挑战第26天】Java IO流优化涉及缓冲、资源管理、字符编码和流式处理。使用Buffered流提高读写效率,如`BufferedInputStream`和`BufferedReader`。确保资源关闭使用try-with-resources,如`try (InputStream is = ...) {...}`。处理文本时指定编码,如`InputStreamReader(is, StandardCharsets.UTF_8)`防止乱码。流式处理大文件,分块读写避免内存溢出,以减少内存占用。这些技巧能提升程序性能和健壮性。
507 0
|
网络协议 算法 网络架构
FRR+BFD+OSPF与BGP联动
FRR+BFD+OSPF与BGP联动
468 0
|
Linux 调度
Linux系统调试篇——Perf性能分析指南
Linux系统调试篇——Perf性能分析指南