bpftrace使用案例学习

简介: bpftrace使用案例学习

参考手册

小技巧

  • 读取内核全局变量的值(参考
# bpftrace -qe 'BEGIN {printf("banner: %s\ntotalram: 0x%lx\n", str(kaddr("linux_banner")), *kaddr("_totalram_pages")); exit();}'
banner: Linux version 5.19.0+ (pengdl@ubuntu) (gcc (Ubuntu 9.4.0-1ubunt
totalram: 0xd3178
  • 抓取地址被写时的调用栈 (参考

当排查内核中某个变量被谁在哪个位置修改时,可以使用这个方法。变量的地址可以根据/proc/kallsyms或者crash工具或者bpftrace或者内核日志来获得

  • 自定义结构体

对于无法直接访问的内核结构体,可以用下面的方法自定义一个数据结构来获取自己关心的字段的值。

#!/usr/bin/env bpftrace
/*
struct worker_pool {
    [0x0] spinlock_t lock;
    [0x4] int cpu;
    [0x8] int node;
    [0xc] int id;
   [0x10] unsigned int flags;
   [0x18] unsigned long watchdog_ts;
   [0x20] struct list_head worklist;
   [0x30] int nr_workers;
   [0x34] int nr_idle;
   [0x38] struct list_head idle_list;
   [0x48] struct timer_list idle_timer;
   [0x90] struct timer_list mayday_timer;
   [0xd8] struct hlist_head busy_hash[64];
  [0x2d8] struct worker *manager;
  [0x2e0] struct list_head workers;
  [0x2f0] struct completion *detach_completion;
  [0x2f8] struct ida worker_ida;
  [0x310] struct workqueue_attrs *attrs;
  [0x318] struct hlist_node hash_node;
  [0x328] int refcnt;
  [0x340] atomic_t nr_running;
  [0x348] struct callback_head rcu;
}
*/
union worker_pool
{
    struct {
        char rsv0[0xc];
        int id;
    };
    struct {
        char rsv1[0x30];
        int nr_workers;
        int nr_idle;
    };
    struct {
        char rsv2[0x340];
        int nr_running;
    };
};
struct worker {
    char rsv0[0x40];
    union worker_pool *pool;
};
kprobe:create_worker
{
$wp = (union worker_pool *)arg0;
if ($wp->id == 4) {
printf("%s: nr_worker: %d, nr_idle: %d, nr_running: %d, %s\n",
            func, $wp->nr_workers, $wp->nr_idle, $wp->nr_running, kstack);
    }
}
kprobe:destroy_worker
{
$wp = ((struct worker *)arg0)->pool;
if ($wp->id == 4) {
        time();
printf(" %s: nr_worker: %d, nr_idle: %d, nr_running: %d, %s\n",
            func, $wp->nr_workers, $wp->nr_idle, $wp->nr_running, kstack);
    }
}

内存泄漏

kmemleak.bt源码

用法:./kmemleak.bt [槽位数]

语法

相关文章
|
Shell 容器 Perl
Back-off restarting failed container 问题解决
Back-off restarting failed container 问题解决
3672 0
|
11月前
|
人工智能 运维 Anolis
|
存储 Prometheus 监控
Linux技术工具:bpftrace介绍
Linux技术工具:bpftrace介绍
742 7
|
人工智能 供应链 搜索推荐
企业CRM选型必看:2024年最佳CRM系统排行
企业用户在选择CRM系统时,不仅要考虑系统的功能性、可定制性,还要考虑其与现有工具的集成能力以及价格。此外,在2024年,越来越多的企业用户会把CRM厂商的AI能力列入考察范畴。 本文分析整理2024年最佳CRM系统排行榜,从系统功能、优势、适用企业类型等方面,为企业用户选型客户关系管理系统提供参考。
|
前端开发 Linux 调度
ftrace、perf、bcc、bpftrace、ply的使用
ftrace、perf、bcc、bpftrace、ply的使用
|
Ubuntu Linux 网络安全
|
SQL 自然语言处理 JavaScript
快来与 CodeQwen1.5 结对编程
今天,来自 Qwen1.5 开源家族的新成员,代码专家模型 CodeQwen1.5开源!CodeQwen1.5 基于 Qwen 语言模型初始化,拥有 7B 参数的模型,其拥有 GQA 架构,经过了 ~3T tokens 代码相关的数据进行预训练,共计支持 92 种编程语言、且最长支持 64K 的上下文输入。效果方面,CodeQwen1.5 展现出了优秀的代码生成、长序列建模、代码修改、SQL 能力等,该模型可以大大提高开发人员的工作效率,并在不同的技术环境中简化软件开发工作流程。
|
移动开发 小程序 前端开发
php + h5使用 scheme页面跳转微信小程序-其他浏览器一键跳转到微信并打开小程序
php + h5使用 scheme页面跳转微信小程序-其他浏览器一键跳转到微信并打开小程序
554 0
|
Linux Ubuntu 网络安全
Linux 命令学习之dpkg命令详解
<p>dpkg是一个Debian的一个命令行工具,它可以用来安装、删除、构建和管理Debian的软件包。<br> 下面是它的一些命令解释:<br> 1)安装软件<br> 命令行:dpkg -i &lt;.deb file name&gt;<br> 示例:dpkg -i avg71flm_r28-1_i386.deb<br> 2)安装一个目录下面所有的软件包<br> 命令行:dp
4365 0
|
Rust 监控 安全
2022云栖精选—Coolbpf的应用实践
毛文安 龙蜥社区系统运维SIG Owner 龙蜥社区eBPF技术探索SIG Maintainer
2022云栖精选—Coolbpf的应用实践

热门文章

最新文章