Linux 系統監控與性能調優實戰 2026

💡 為什麼需要系統監控? 服務器性能問題往往不是突然出現的,而是逐步積累的。通過持續的系統監控,你可以提前發現性能瓶頸、預測資源需求、快速定位故障,保障業務穩定運行。
本文將帶你從 0 到 1 掌握:
- ✅ CPU 性能監控與分析(top / htop / mpstat)
- ✅ 內存使用監控與優化(free / vmstat / sar)
- ✅ 磁盤 I/O 監控與調優(iostat / iotop / hdparm)
- ✅ 網絡性能監控與診斷(netstat / ss / iftop / nload)
- ✅ 綜合監控工具 glances / dstat
- ✅ 性能瓶頸定位方法論
- ✅ 實戰優化策略
一、性能監控基礎框架
1.1 四大子系統
Linux 性能監控主要關注四個核心子系統:
| 子系統 | 關鍵指標 | 常用工具 |
|---|---|---|
| CPU | 使用率、負載、上下文切換、中斷 | top, htop, mpstat, vmstat, pidstat |
| 內存 | 使用率、交換分區、緩存、缺頁 | free, vmstat, sar, slabtop |
| 磁盤 I/O | 讀寫速度、IOPS、等待時間、利用率 | iostat, iotop, dstat, hdparm |
| 網絡 | 帶寬、延遲、丟包、連接數 | ss, netstat, iftop, nload, ping |
1.2 性能分析方法論
問題現象 → 初步排查 → 子系統定位 → 深度分析 → 根因確認 → 優化實施 → 效果驗證
↓ ↓ ↓ ↓ ↓ ↓ ↓
用戶反饋 top/htop 確認瓶頸 專項工具 定位進程 參數調整 持續監控二、CPU 性能監控
2.1 top 命令詳解
top 是最常用的系統監控命令,實時顯示系統整體運行狀態:
top頂部信息解讀:
top - 10:30:45 up 15 days, 3:20, 2 users, load average: 0.85, 0.92, 0.78
Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.5 us, 1.2 sy, 0.0 ni, 94.8 id, 0.2 wa, 0.0 hi, 0.3 si, 0.0 st
MiB Mem : 7956.4 total, 1234.5 free, 3456.7 used, 3265.2 buff/cache
MiB Swap: 8192.0 total, 7890.1 free, 301.9 used. 4123.4 avail Mem關鍵字段說明:
| 字段 | 含義 | 參考閾值 |
|---|---|---|
load average | 1/5/15分鐘平均負載 | 單核 CPU >1 需關注 |
us | 用戶空間 CPU 佔比 | 持續 >70% 需優化 |
sy | 內核空間 CPU 佔比 | 持續 >30% 需關注 |
wa | I/O 等待佔比 | 持續 >20% 說明磁盤瓶頸 |
id | CPU 空閒率 | <10% 說明 CPU 緊張 |
st | 虛擬化偷取時間 | >5% 說明宿主機過載 |
top 常用快捷鍵:
| 按鍵 | 功能 |
|---|---|
1 | 顯示每個 CPU 核心使用情況 |
P | 按 CPU 使用率排序 |
M | 按內存使用率排序 |
T | 按運行時間排序 |
k | 殺死指定進程 |
r | 修改進程優先級 |
z | 彩色/黑白切換 |
c | 顯示完整命令行 |
2.2 htop - 增強版 top
# Debian/Ubuntu 安裝
apt install htop
# CentOS/RHEL 安裝
yum install htophtop 相比 top 的優勢:
- 彩色顯示,更直觀的 CPU 進度條
- 支持鼠標操作
- 橫向滾動查看完整命令行
- 進程樹視圖(F5)
- 更友好的進程管理(F9 殺死,F7/F8 調整優先級)
2.3 mpstat - 多處理器統計
# 安裝 sysstat 工具包
apt install sysstat
# 查看所有 CPU 核心統計(每秒刷新,共5次)
mpstat -P ALL 1 5
# 查看平均統計
mpstat 1 5輸出示例:
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 3.45 0.00 1.18 0.23 0.00 0.32 0.00 0.00 0.00 94.82
Average: 0 2.80 0.00 0.95 0.15 0.00 0.25 0.00 0.00 0.00 95.85
Average: 1 4.10 0.00 1.40 0.30 0.00 0.40 0.00 0.00 0.00 93.802.4 負載均衡分析
理解 load average:
- 負載值表示等待 CPU 的進程數(包括正在運行的)
- 單核 CPU:負載 < 0.7 健康,0.7-1.0 需關注,>1.0 過載
- 多核 CPU:將負載值除以核心數來判斷
- 5分鐘和15分鐘負載更能反映真實趨勢
# 查看 CPU 核心數
nproc
# 計算每核負載
# load_average / cpu_cores2.5 CPU 性能優化策略
| 場景 | 優化方向 | 具體措施 |
|---|---|---|
| 用戶態 CPU 高 | 優化應用代碼 | 性能剖析(perf)、算法優化、減少計算 |
| 內核態 CPU 高 | 優化系統調用 | 減少 I/O 操作、優化網絡棧 |
| 上下文切換頻繁 | 減少線程數 | 線程池優化、減少鎖競爭 |
| I/O 等待高 | 優化存儲 | 升級 SSD、緩存優化、異步 I/O |
| 軟中斷高 | 優化網絡 | 網卡多隊列、RPS/RFS、中斷綁核 |
三、內存性能監控
3.1 free 命令
# 人類可讀格式顯示
free -h
# 連續觀察(每秒刷新)
watch -n 1 free -h輸出示例:
total used free shared buff/cache available
Mem: 7.8Gi 3.4Gi 1.2Gi 156Mi 3.2Gi 4.0Gi
Swap: 8.0Gi 301Mi 7.7Gi字段說明:
| 字段 | 含義 |
|---|---|
total | 總內存 |
used | 已使用內存(不含緩存) |
free | 完全空閒的內存 |
buff/cache | 緩衝區和頁緩存(可回收) |
available | 實際可用內存(free + 可回收緩存) |
⚠️ 重要概念: Linux 會盡可能多地使用空閒內存作為緩存(buff/cache)來提升性能,所以
free小不代表內存不足,關鍵看available是否充足。
3.2 vmstat - 虛擬內存統計
# 每秒採樣,共10次
vmstat 1 10輸出示例:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 308736 1263688 183456 3156732 0 0 2 15 45 89 3 1 95 0 0關鍵字段:
| 類別 | 字段 | 含義 |
|---|---|---|
| 進程 | r | 等待運行的進程數(>CPU核數說明CPU瓶頸) |
| 進程 | b | 不可中斷睡眠的進程數(通常在等I/O) |
| 內存 | swpd | 已使用的交換空間 |
| 內存 | free | 空閒內存 |
| 交換 | si | 從磁盤換入內存的速度(KB/s) |
| 交換 | so | 從內存換出到磁盤的速度(KB/s) |
| I/O | bi | 塊設備讀入(塊/秒) |
| I/O | bo | 塊設備寫出(塊/秒) |
| 系統 | in | 中斷數/秒 |
| 系統 | cs | 上下文切換/秒 |
⚠️ 內存瓶頸信號:
si和so持續大於 0,說明內存不足,系統頻繁使用交換分區。
3.3 進程內存分析
# 查看進程內存佔用(按 RSS 排序)
ps aux --sort=-rss | head -20
# 查看指定進程的內存映射
pmap -x <PID>
# 查看進程的內存狀態
cat /proc/<PID>/status3.4 內存優化策略
| 場景 | 優化措施 |
|---|---|
| 物理內存不足 | 增加內存、優化應用內存佔用 |
| 頻繁換頁 | 調整 swappiness、減少內存佔用 |
| 緩存命中率低 | 增加緩存、優化數據訪問模式 |
| 內存洩漏 | 使用 valgrind/mtrace 定位洩漏點 |
調整 swappiness:
# 查看當前值
cat /proc/sys/vm/swappiness
# 臨時調整(0-100,值越小越不傾向使用swap)
sysctl vm.swappiness=10
# 永久生效
echo 'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p四、磁盤 I/O 性能監控
4.1 iostat - I/O 統計
# 安裝 sysstat(如未安裝)
apt install sysstat
# 顯示所有磁盤 I/O 統計(每秒刷新,共5次)
iostat -xz 1 5
# 僅顯示設備使用率
iostat -d -x -k 1 5輸出示例:
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
vda 0.50 2.30 12.50 145.60 0.00 0.80 0.00 25.81 0.80 1.20 0.00 25.00 63.30 0.50 0.14關鍵字段:
| 字段 | 含義 | 參考閾值 |
|---|---|---|
r/s | 每秒讀請求數 | - |
w/s | 每秒寫請求數 | - |
rkB/s | 每秒讀數據量(KB) | - |
wkB/s | 每秒寫數據量(KB) | - |
r_await | 讀請求平均等待時間(ms) | >50ms 較慢 |
w_await | 寫請求平均等待時間(ms) | >50ms 較慢 |
aqu-sz | 平均請求隊列長度 | - |
%util | 設備利用率(繁忙時間佔比) | 持續 >80% 說明 I/O 瓶頸 |
4.2 iotop - 進程級 I/O 監控
# 安裝
apt install iotop
# 運行
iotop
# 只顯示有 I/O 活動的進程
iotop -o4.3 磁盤性能測試
# 測試讀取速度
hdparm -Tt /dev/vda
# 使用 dd 測試寫速度(注意:會創建測試文件)
dd if=/dev/zero of=/tmp/test bs=1M count=1024 oflag=direct
# 使用 dd 測試讀速度
dd if=/tmp/test of=/dev/null bs=1M count=1024 iflag=direct4.4 磁盤 I/O 優化策略
| 優化方向 | 具體措施 |
|---|---|
| 硬件升級 | HDD → SSD、增加磁盤組成 RAID |
| 文件系統 | 選擇合適的文件系統(ext4/xfs/btrfs) |
| 掛載參數 | noatime、data=writeback 等 |
| I/O 調度 | SSD 用 none/mq-deadline,HDD 用 bfq |
| 應用優化 | 減少隨機 I/O、批量寫入、使用緩存 |
查看/修改 I/O 調度器:
# 查看當前調度器
cat /sys/block/vda/queue/scheduler
# 臨時修改
echo mq-deadline > /sys/block/vda/queue/scheduler五、網絡性能監控
5.1 ss / netstat - 連接統計
# 查看所有 TCP 連接
ss -tulnp
# 查看連接狀態統計
ss -s
# 按端口統計連接數
ss -tan | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -rn連接狀態說明:
| 狀態 | 含義 |
|---|---|
ESTABLISHED | 已建立連接 |
LISTEN | 監聽中 |
TIME_WAIT | 等待關閉(主動關閉方) |
CLOSE_WAIT | 等待關閉(被動關閉方) |
SYN_SENT/RECV | 三次握手中 |
⚠️ 注意: 大量
CLOSE_WAIT通常說明應用沒有正確關閉連接;大量TIME_WAIT可能需要調整內核參數。
5.2 iftop / nload - 實時流量監控
# 安裝
apt install iftop nload
# 監控指定網卡流量
iftop -i eth0
# 圖形化顯示流量
nload eth05.3 網絡延遲與丟包
# 測試延遲與丟包
ping -c 100 -i 0.2 example.com
# 路由追蹤
traceroute example.com
# 使用 mtr 持續測試
mtr --report example.com5.4 網絡性能優化
| 優化方向 | 措施 |
|---|---|
| TCP 參數 | 調整 tcp_tw_reuse、tcp_fin_timeout |
| 緩衝區 | 調大 net.core.rmem_max、wmem_max |
| 連接數 | 調大文件描述符限制 |
| 網卡 | 開啟多隊列、RSS、中斷綁核 |
常用內核參數優化:
# 編輯 sysctl 配置
cat >> /etc/sysctl.conf << 'EOF'
# TCP 優化
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 65535
# 網絡緩衝區
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
EOF
# 生效
sysctl -p六、綜合監控工具
6.1 glances - 一站式監控
# 安裝
apt install glances
# 運行
glances
# Web 模式(瀏覽器訪問 http://IP:61208)
glances -wglances 集成了 CPU、內存、磁盤、網絡、進程等所有監控指標,界面友好,信息豐富。
6.2 dstat - 全能系統統計
# 安裝
apt install dstat
# 綜合顯示(默認)
dstat
# 顯示更多信息
dstat -cdlmnpsy6.3 sar - 歷史數據統計
# sysstat 包自帶,需要開啟數據收集
# 編輯 /etc/default/sysstat,設置 ENABLED="true"
# 查看當天 CPU 歷史
sar -u
# 查看當天內存歷史
sar -r
# 查看當天磁盤 I/O
sar -b
# 查看指定日期
sar -u -f /var/log/sysstat/sa28七、性能瓶頸定位實戰
7.1 排查思路
遇到系統慢時,按以下順序排查:
- 整體概覽:
top/htop/glances看整體負載 - CPU 分析: 負載高是用戶態還是內核態?是哪個進程?
- 內存分析: 內存夠不夠?有沒有頻繁換頁?
- I/O 分析: 是不是磁盤瓶頸?哪個進程在讀寫?
- 網絡分析: 網絡帶寬夠不夠?連接數是否正常?
7.2 常見問題定位
場景一:CPU 使用率高
# 1. 找到佔用 CPU 高的進程
top # 按 P 排序
# 2. 查看進程中的線程
top -H -p <PID>
# 3. 用 perf 分析熱點函數
perf top -p <PID>場景二:系統負載高但 CPU 空閒
# 1. vmstat 看是否是 I/O 等待
vmstat 1 5 # 看 wa 列
# 2. iotop 找高 I/O 進程
iotop -o
# 3. iostat 確認磁盤瓶頸
iostat -xz 1 5場景三:內存不足
# 1. 確認內存使用
free -h
# 2. 看是否有換頁
vmstat 1 5 # si/so 列
# 3. 找內存佔用高的進程
ps aux --sort=-rss | head -10八、系統調優實戰建議
8.1 通用優化 checklist
8.2 文件描述符優化
# 查看當前限制
ulimit -n
# 臨時調整
ulimit -n 65535
# 永久生效(編輯 /etc/security/limits.conf)
cat >> /etc/security/limits.conf << 'EOF'
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
EOF九、總結
Linux 系統監控與性能調優是運維工程師的核心技能。掌握好四大子系統的監控工具,建立系統化的排查思路,就能快速定位和解決絕大多數性能問題。
關鍵要點回顧:
- 監控先行 - 建立完善的監控體系,而不是出了問題才排查
- 數據說話 - 用工具量化性能指標,避免憑感覺調優
- 系統思維 - 性能問題往往是多因素的,需要綜合分析
- 持續優化 - 性能調優是持續迭代的過程,不是一勞永逸
下一篇我們將介紹 crontab 定時任務與自動化運維,學習如何將日常運維工作自動化,進一步提升運維效率。