1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #!/usr/bin/env bpftrace
BEGIN { printf("Sampling all CPU stacks every ~10ms (99Hz)...\n"); }
// 周期性采样所有 CPU 的调用栈(每秒 99 次) profile:hz:99 { $cpu = cpu; $pid = pid; $comm = comm;
// 存储当前 CPU 的进程信息和调用栈 @pid[$cpu] = $pid; @comm[$cpu] = $comm; @stack[$cpu] = kstack; }
// 每 1 秒打印采样结果 interval:s:1 { time("%H:%M:%S\n"); printf("CPU stacks:\n");
// 遍历所有 CPU 的采样数据 print(@pid); print(@comm); print(@stack);
// 清除映射,避免累积 clear(@pid); clear(@comm); clear(@stack); }
// 程序退出时清理 END { clear(@pid); clear(@comm); clear(@stack); }
|