提示:本网站现在为维护调试状态

Linux 性能調優:perf_events + bpftrace + BCC

Choyeon
Choyeon
2026年9月11日 1 分鐘閱讀 361 閱讀
571 字 1,905 字元 更新於 2026年11月8日
Linux 性能調優:perf_events + bpftrace + BCC
目錄

Linux 性能调优:perf_events + bpftrace + BCC

线上服务器性能问题排查的核心思路是 USE 法:先看每个资源的 Utilization(利用率)、Saturation(饱和度)、Errors(错误数),再用对应工具深入。本文介绍三大主流工具。

perf_events:CPU 级热点分析

perf 基于 CPU PMU 硬件计数器,开销极低(~2%)。99Hz 采样避开调度周期整倍数获取真实分布。perf stat 看 cache miss、分支预测失败宏观指标;perf record + FlameGraph 生成交互式火焰图。

#!/usr/bin/env bash
set -euo pipefail
LOG=perf-report-$(date +%Y%m%d-%H%M).log
exec > >(tee -a "$LOG") 2>&1

echo "===== [1] CPU TOP functions 30s ====="
perf record -F 99 -a -g -- sleep 30
perf report --stdio -n --sort comm,dso,symbol | head -60
# perf script | FlameGraph/stackcollapse-perf.pl | flamegraph.pl > cpu-flame.svg

echo "\n===== [2] perf stat system-wide ====="
perf stat -a -d -- sleep 10
# 关注 context-switches, cache-misses 比率, stalled-cycles-frontend

echo "\n===== [3] bpftrace: block IO size distribution by comm ====="
bpftrace -e '
tracepoint:block:block_rq_issue { @[comm, args->rwbs[0]] = hist(args->bytes); }
interval:s:15 { printf("\n=== 15s IO hist by process ===\n"); print(@); clear(@); exit(); }
' 2>&1 | head -40 || true

echo "\n===== [4] bpftrace: TCP active connect trace ====="
bpftrace -e '
kprobe:tcp_connect { printf("PID %d (%s) -> %s\n", pid, comm, ntop(args->family, args->daddr)); }
' -c 'curl -s https://example.com >/dev/null' 2>&1 | head -20 || true

echo "\n===== [5] BCC biolatency + tcplife ====="
/usr/share/bcc/tools/biolatency -mF 1 5 || true
# /usr/share/bcc/tools/offcputime -df 5 1 > offcpu.stacks
timeout 15 /usr/share/bcc/tools/tcplife -L -T 2>/dev/null | head -40 || true

echo "\n===== [6] snapshot vmstat slabtop sar ====="
vmstat 1 5
echo "--- slab top ---"
slabtop -o -s c | head -25 || true
echo "--- THP check ---"
grep -E "AnonHugePages|HugePages_Total" /proc/meminfo || true
echo "\nSaved to: $LOG"

bpftrace / BCC:内核事件追踪

eBPF 可在内核函数、tracepoint、USDT 探针挂载自定义 C 程序,安全沙箱化运行。bpftrace 适合一行脚本速查;BCC 是预编译好的 200+ 常用工具,biolatency、offcputime、tcplife 是 IO/阻塞/网络延迟三板斧。

资源维度 宏观指标(一眼定位) 微观诊断工具(深入分析)
CPU top/vmstat us,sy,wa,st perf record + FlameGraph
调度延迟 /proc/schedstat pidstat -w BCC runqlat bpftrace sched_switch
内存 free/vmstat si,so sar -r BCC memleak perf kmem slabtop
磁盘IO iostat -xz await/util% BCC biolatency bpftrace block_rq_*
网络延迟 ss -ti/sar -n TCP,ETCP BCC tcplife bpftrace tcp:probe

最佳实践

先宏观再微观:先跑 sar/vmstat 确定是哪类资源问题,再用对应 BCC 工具,最后 perf/bpftrace 自定义追踪。eBPF 权限高,生产先 staging 验证,注意运行时长不超过几分钟。

X微博Telegram

本文作者

投票

你最希望 Rosetta 优先加入哪项功能?

社区投票(演示数据,可后台删除)

留言 (3)

0 / 3000
DevOps小能手
DevOps小能手devops-lab.cn2026年10月1日

写得太好了,终于搞懂了分布式事务的几种方案区别,收藏了!

技术笔记控
技术笔记控tech-notes.fun2026年10月1日

作为一个刚入行的后端新人,这篇文章帮我理清了好多概念,谢谢博主持续输出高质量内容!

画画的小鱼
画画的小鱼fishgallery.art2026年9月30日

代码示例里那个 SQL 查询是不是应该加个 LIMIT?不然数据量大的时候全表扫描会很慢哦。

相關文章

Rust 所有權與借用機制:徹底理解生命週期

Rust 所有權與借用機制:徹底理解生命週期

系統攻克 Rust 最獨特概念:所有權規則、可變/不可變借用約束、引用生命週期標註。通過編譯錯誤示例 + 修復方案,徹底掌握借用檢查器思維方式,寫出安全零抽象開銷的系統代碼。

1 分鐘閱讀
PostgreSQL 查詢優化技巧

PostgreSQL 查詢優化技巧

深入掌握 PostgreSQL 查詢優化的核心方法:從 EXPLAIN ANALYZE 執行計劃解讀,到索引類型選擇(B-tree/GIN/BRIN)、統計資訊更新、連接策略調整、分區表設計,全方位提升數據庫查詢性能。

1 分鐘閱讀
WebAssembly 入門:Rust 編譯 WASM + JS 調用

WebAssembly 入門:Rust 編譯 WASM + JS 調用

從零搭建 Rust → WebAssembly 開發流程:wasm-pack 工具鏈、wasm-bindgen 類型綁定、JavaScript 同步/異步調用 WASM 函數、內存共享與 TypedArray 傳遞大數據。

1 分鐘閱讀
Zero Trust 安全架構入門:永不信任,始終驗證

Zero Trust 安全架構入門:永不信任,始終驗證

零信任安全模型系統入門:以"永不信任,始終驗證"為核心原則,打破傳統邊界防護(VPN=內部可信)的思維。從身份認證(MFA/SAML)、設備健康檢查、最小權限 RBAC、微隔離 mTLS、持續信任評分到可觀測審計鏈路的 6 大支柱詳解,附落地實施路線。

1 分鐘閱讀
Kubernetes Pod 生命週期 + Init Container + Sidecar

Kubernetes Pod 生命週期 + Init Container + Sidecar

詳細拆解 Kubernetes Pod 從 Pending 到 Terminated 的完整狀態機、PostStart/PreStop 鉤子執行時機、Init Container 前置依賴保證、Sidecar 容器模式(istio-proxy、日誌收集),以及優雅終止零停機配置。

1 分鐘閱讀
測試金字塔:單元/整合/E2E 測試比例與落地

測試金字塔:單元/整合/E2E 測試比例與落地

系統解析測試金字塔架構:從底層單元測試(大量快速、Mock 隔離依賴)、中層整合測試(服務/數據庫/消息協作真實交互)、頂層 E2E 測試(真實用戶路徑少量精測)的推薦比例 70% / 20% / 10%,附項目覆蓋率指標與落地實踐。

1 分鐘閱讀