vmstat 2 3 # 間隔 2 秒,采樣 3 次
核心欄位:
r 運行隊列長度(>CPU 核心數即擁塞)b 阻塞進程數si/so 換入/換出內存(持續非 0 = 內存不足)bi/bo 塊設備讀寫扇區數in/cs 中斷/上下文切換(cs 高 = 線程過多/鎖競爭)us/sy/id/wa 用戶/系統/空閒/IO等待 CPU%iostat -x 2 5 # 擴展統計,每 2 秒 5 次
黃金指標:
await 平均 I/O 等待時間(ms),含隊列 + 服務時間svctm 設備服務時間,await >> svctm 表明隊列積壓%util 接近 100% = 設備帶寬飽和avgqu-sz 平均請求隊列長度mpstat -P ALL 2 3
%usr 高而其他核心閒置 → 應用無多線程或鎖競爭。%iowait 高 → 磁盤子系統瓶頸。ifstat -t -i eth0 1
即時顯示 KB/s in/out,排查網絡飽和、異常流量。
dstat -cdlmnpsy 3 # cpu, disk, load, memory, net, paging, system, yaml輸出
alias dstat='dstat -cdlmnpsy'
一條命令覆蓋 vmstat/iostat/ifstat/mpstat,適合人工巡檢。
./tcprstat -p 3306 -t 1 -n 10
# 輸出:timestamp count max min avg med stddev 95_max 95_avg 99_max...
SHOW PROCESSLIST 看不出問題的情況。tcpdump -i eth0 -s 0 -l -w - dst 192.168.1.100 and port 3306 | strings
# 可見明文 SQL、握手包、錯誤包
-C 100 -W 10 切割文件,避免佔滿磁盤。perf top -p $(pidof mysqld) # 實時函數級熱點
perf record -g -p $(pidof mysqld) -- sleep 30
perf report # 圖形化調用鏈
perf、kernel-debuginfo 以獲得完整符號表。pt-stalk --collect-tcpdump \
--function status \
--variable Threads_connected \
--threshold 2500 \
--daemonize \
--user=root --host=127.0.0.1 --port=3306
Threads_connected > 2500 連續 5 個週期,自動採集:SHOW ENGINE INNODB STATUS、SHOW PROCESSLIST、vmstat、iostat、tcpdump、GDB stack 等打包存入 /var/lib/pt-stalk。./orzdba -lazy -rt -S /tmp/mysql.sock
# 輸出:load、cpu、swap、QPS/TPS、Hit%、tcprstat 響應時間分布
模組化設計:
-lazy:一屏核心指標(日常巡檢首選)。-innodb:Buffer Pool、Redo Log、History List、鎖等深度指標。-mysql:QPS、緩存命中、線程、臨時表等 Server 層指標。-n eth0:網卡流量。orztop -h=192.168.1.100 -P=3306 -u=orztop -p=xxx -t=1
top 但針對 MySQL 線程,實時刷新 SHOW FULL PROCESSLIST,高亮長耗時 SQL。# 文件 IO 壓測
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw \
--max-time=3600 --max-requests=0 run
# OLTP 讀寫壓測
sysbench --db-driver=mysql --mysql-host=127.0.0.1 --mysql-port=3306 \
--mysql-user=root --mysql-password=xxx --mysql-db=test \
--tables=10 --table-size=1000000 --threads=64 --time=300 --report-interval=10 \
oltp_read_write run
| 場景 | 首選工具 | 輔助工具 |
|---|---|---|
| 日常巡檢 | orzdba -lazy | dstat |
| CPU 飆高找兇手 | mpstat -P ALL / perf top | vmstat |
| 磁盤 IO 瓶頸 | iostat -x | dstat -d |
| MySQL 響應抖動 | tcprstat | pt-stalk 自動採集 |
| 疑難雜癥現場保留 | pt-stalk --daemonize | tcpdump + perf |
| 實時 SQL 監控 | orztop | SHOW PROCESSLIST |
| 容量規劃/壓測 | sysbench | go-tpc / tpcc-mysql |
工具無銀彈,關鍵在於「會看懂指標、會串聯證據鏈」。建議 DBA 建立個人化 ~/.dstat_alias、~/.orzdba_preset,形成肌肉記憶;線上故障時,先 orzdba -lazy 定性,再 pt-stalk 鎖定現場,最後 perf/tcpdump 深度溯源,做到有據可查、有據可依。