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

 

 

目录
相关文章
|
5月前
|
运维 监控 网络协议
Linux 下的性能监控与分析技巧
在Linux环境中,命令行工具助力服务器管理和故障排查。通过示例展示如何监控网络、TCP连接、CPU及内存使用。例如,用`netstat`结合`awk`查TOP 20高频率IP访问80端口,识别DDoS迹象;`netstat -nat`统计TCP状态;`ps -aux`排序列出CPU和内存消耗大的进程;`find`加`tar`查找并压缩`.conf`文件。掌握这些命令提升运维效率。
44 1
|
6月前
|
运维 监控 安全
linux日志分析与追踪
在Linux中,日志分析涉及检查 `/var/log` 下的不同文件,如`messages`、`auth.log`、`kern.log`等,以及Web服务器和数据库日志。使用`tail`、`grep`、`awk`等工具实时查看和搜索日志,`logrotate`管理日志大小,`journalctl`处理Systemd日志,而`Splunk`等工具则用于集中式分析。分析技巧包括异常检测、时间关联和阈值监控。安全事件追踪结合登录失败日志、网络嗅探和IDS/IPS。日志链路追踪在分布式系统中尤为重要,帮助定位服务调用问题。有效的日志管理和分析能增强系统安全和故障排除能力。
56 7
|
监控 Kubernetes 网络协议
DoorDash 基于 eBPF 的监控实践
DoorDash 基于 eBPF 的监控实践
185 0
|
缓存 监控 Ubuntu
Linux Command BCC 性能监视、网络动态跟踪工具
Linux Command BCC 性能监视、网络动态跟踪工具
|
缓存 监控 关系型数据库
Linux性能监控与调优工具
Linux性能监控与调优工具
199 0
|
监控 安全 网络协议
eBPF 是用来干什么的?
eBPF 是用来干什么的?
|
前端开发 API C语言
eunomia-bpf 用户手册: 让 eBPF 程序的开发和部署尽可能简单
让 eBPF 程序的分发和使用像网页和 Web 服务一样自然(Make eBPF as a service): 支持在集群环境中直接通过一次请求进行分发和热更新,仅需数十 kB 的 payload, <100ms 的更新时间,和少量的 CPU 内存占用即可完成 eBPF 程序的分发、部署和更新; 不需要执行额外的编译过程,就能得到 CO-RE 的运行效率;
845 0
eunomia-bpf 用户手册: 让 eBPF 程序的开发和部署尽可能简单
|
前端开发 网络协议 Linux
问题排查利器:Linux 原生跟踪工具 Ftrace 必知必会
问题排查利器:Linux 原生跟踪工具 Ftrace 必知必会
526 0
|
Rust 安全 网络协议
2021 年的 eBPF
诞生之初,eBPF 选择了一条非常务实的演进之路,没有选择重新造轮子,从优化 cBPF ([net: filter: rework/optimize internal BPF interpreter's instruction set](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bd4
1469 0