圖形化工具雖直觀,但消耗資源大,不適合長期運行在生產服務器上。真正的運維專家都在命令行裡診斷問題。本文介紹 16 個經典監控命令,涵蓋 CPU、內存、磁盤 I/O、網絡、進程等核心維度,助你快速定位性能瓶頸。
建議服務器運行在 Runlevel 3(多用戶、網絡、無 GUI)。若預設進入圖形界面,可修改 /etc/inittab 將 id:5:initdefault: 改為 id:3:initdefault:,或臨時執行 init 3 切換。
ss 取代)用於檢測存儲設備性能,在用戶感知「服務器變慢」前發現 I/O 瓶頸。
# iostat 1
Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012-12-22 _i686_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.55 0.00 0.03 0.02 0.00 99.40
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sdb 0.41 2.61 5.76 2558664 5653872
sda 0.24 0.80 4.12 784650 4038344
關鍵指標:%iowait 高表示 CPU 在等磁盤;tps(每秒傳輸請求數)、Blk_read/s、Blk_wrtn/s 反映吞吐量。
cat /proc/meminfo 提供內核級詳情;free -m 以 MB 為單位給出直觀摘要。
# free -m
total used free shared buffers cached
Mem: 1513 1429 83 0 343 836
-/+ buffers/cache: 249 1263
Swap: 0 0 0
重點看 -/+ buffers/cache 行:used 為應用實際佔用,free 為可用內存。Linux 將空閒內存用作緩存,free 小不代表內存不足;若 Swap 頻繁讀寫(si/so 非零)才是真缺內存。
# mpstat -P ALL
17:46:35 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
17:46:35 all 0.55 0.00 0.03 0.02 0.00 0.00 0.00 0.00 99.40
17:46:35 0 0.84 0.00 0.04 0.03 0.00 0.01 0.00 0.00 99.08
17:46:35 1 0.51 0.00 0.03 0.02 0.00 0.00 0.00 0.00 99.44
...
字段含義:%usr 用戶態、%sys 內核態、%iowait I/O 等待、%irq 硬中斷、%soft 軟中斷、%steal 虛擬化偷取、%guest 客戶機 CPU。可用 -P 0 指定單核。
常用選項:-a 所有 socket、-r 路由表、-i 網卡統計、-s 協議統計、-n 數字顯示 IP/端口、-p 顯示 PID/程序名(需 root)。現代系統建議改用 ss(iproute2 套件),速度更快、信息更全。
交互式界面,按鍵切換:c CPU、m 內存、d 磁盤、n 網絡、k 內核統計、t 熱門進程。適合快速現場排查,也可錄製數據離線分析(nmon -f -s 30 -c 2880)。
pmap -x PID 顯示進程每個內存映射區域的大小、權限、映射文件,排查內存洩漏、共享庫加載情況利器。
strace -p PID 附着到運行進程;strace -f -o trace.log ./program 追蹤子進程並輸出文件。能看到 open、read、write、connect、stat 等調用參數與返回值,解決「為什麼啟動失敗」「為什麼讀不到配置」等疑難雜症。
tcpdump -i eth0 -nn -s0 -w capture.pcap port 80 抓取 80 端口全量數據包寫文件,再用 Wireshark 深度分析。熟練掌握 BPF 過濾語法是網絡排障基本功。
top 經典視圖:負載、進程數、CPU 佔用(us/sy/ni/id/wa/hi/si/st)、內存/Swap、進程列表(PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND)。htop 提供彩色、可滾動、樹狀、鼠標操作、直接殺進程等增強體驗。
vmstat 1 10 每秒采樣 10 次。關注 r(運行隊列長度)、b(不可中斷睡眠)、si/so(Swap 進/出)、bi/bo(塊設備讀/寫)、in(中斷)、cs(上下文切換)、us/sy/id/wa/st(CPU 細分)。r 長期超過 CPU 核心數說明 CPU 瓶頸;wa 高說明 I/O 瓶頸。
sysstat 套件自帶,定時采集保存二進制日志(/var/log/sa/saDD)。sar -u CPU、-r 內存、-d 磁盤、-n DEV 網卡、-q 隊列。事後分析「凌晨 3 點發生了什麼」首選。
實戰建議: 建立基線(正常時的指標範圍),異常時對比定位。組合使用:top 看熱點進程 → pidstat -p PID 1 看線程 → strace 看調用 → tcpdump 看網絡。工具箱裡永遠裝著 man 手冊。