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

Linux 性能チューニング:perf + bpftrace + BCC

Choyeon
Choyeon
2026年9月11日 1 分で読了 368 閲覧
437 字 2,421 文字 更新日 2026年11月8日
Linux 性能チューニング:perf + bpftrace + BCC
目次

Linux Performance Tuning: perf, bpftrace & BCC

The USE Method guides production debugging: first measure Utilization, Saturation, and Errors for each resource, then deep-dive with specific tools. This covers today's three most important tools.

perf_events: CPU-level Hotspot Analysis

perf uses CPU PMU hardware counters with tiny overhead (~2%). Sample at 99Hz to avoid lock-step with scheduler periodicity for accurate distributions. perf stat captures macro metrics; perf record + FlameGraph builds interactive visualizations.

#!/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 and BCC: Kernel Event Tracing

eBPF attaches sandboxed C programs to kernel functions, tracepoints, USDT probes. bpftrace excels at one-liner rapid investigations. BCC ships 200+ prepackaged tools; biolatency, offcputime, and tcplife are your triad for IO/block/network latency triage.

Resource Dimension Macro Triage (orientation) Micro Diagnostic (deep dive)
CPU top/vmstat us,sy,wa,st cols perf record + FlameGraph
Scheduler latency /proc/schedstat pidstat -w BCC runqlat bpftrace sched_switch
Memory free/vmstat si,so sar -r BCC memleak perf kmem slabtop
Disk IO iostat -xz await/util% BCC biolatency bpftrace block_rq_*
Network latency ss -ti/sar -n TCP,ETCP BCC tcplife bpftrace tcp:probe

Best Practices

Macro before micro: start with sar/vmstat to classify which resource type is the issue, then pick right BCC tools, finally drop into custom perf/bpftrace. eBPF is privileged; validate scripts in staging first and limit production runs to few minutes at a time.

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の最難解概念をマスター:所有権ルール、可変/不変借用の制約、ライフタイム注釈。コンパイルエラー例と修正を通してBorrow Checkerの思考法を習得。

1 分で読了
PostgreSQL クエリ最適化テクニック

PostgreSQL クエリ最適化テクニック

PostgreSQLクエリ最適化:EXPLAIN ANALYZEの読み方、インデックス種別選択、統計情報更新、結合戦略調整、パーティションテーブル設計。

1 分で読了
WebAssembly 入門:Rust → WASM + JS 呼び出し

WebAssembly 入門:Rust → WASM + JS 呼び出し

Rust→WASM開発環境構築:wasm-pack、wasm-bindgen型バインディング、JSからの呼び出し、メモリ共有による大規模データ処理。

1 分で読了
Zero Trust セキュリティアーキテクチャ入門:決して信用せず、常に検証

Zero Trust セキュリティアーキテクチャ入門:決して信用せず、常に検証

Zero Trust セキュリティモデル体系入門:「決して信用せず、常に検証」を原則に、伝統的 VPN=内部信頼の境界防衛思考を打ち砕く。身元認証(MFA/SAML)、端末健康チェック、最小権限RBAC、マイクロセグメンテーションmTLS、継続的信用スコア、可視化監査ログの6本柱を解説、実装ロードマップ付き。

1 分で読了
K8s Pod ライフサイクル + Init コンテナ + Sidecar

K8s Pod ライフサイクル + Init コンテナ + Sidecar

K8s Pod状態遷移Pending→Terminated、PostStart/PreStopフック、Init Container依存保証、Sidecarパターン、グレースフル停止ゼロダウンタイム設定。

1 分で読了
テストピラミッド:単体/結合/E2E 比率と実践

テストピラミッド:単体/結合/E2E 比率と実践

テストピラミッド体系解説:下層 単体テスト(多数・高速・Mock分離)、中層 結合テスト(実DB/メッセージ協調)、上層 E2E(少数・重要ユーザーフロー)。推奨比率 70/20/10、カバレッジ指標と実践ガイド。

1 分で読了