跳轉到內容

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

Linux 系統監控與性能調優

💡 為什麼需要系統監控? 服務器性能問題往往不是突然出現的,而是逐步積累的。通過持續的系統監控,你可以提前發現性能瓶頸、預測資源需求、快速定位故障,保障業務穩定運行。

本文將帶你從 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 是最常用的系統監控命令,實時顯示系統整體運行狀態:

bash
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 average1/5/15分鐘平均負載單核 CPU >1 需關注
us用戶空間 CPU 佔比持續 >70% 需優化
sy內核空間 CPU 佔比持續 >30% 需關注
waI/O 等待佔比持續 >20% 說明磁盤瓶頸
idCPU 空閒率<10% 說明 CPU 緊張
st虛擬化偷取時間>5% 說明宿主機過載

top 常用快捷鍵:

按鍵功能
1顯示每個 CPU 核心使用情況
P按 CPU 使用率排序
M按內存使用率排序
T按運行時間排序
k殺死指定進程
r修改進程優先級
z彩色/黑白切換
c顯示完整命令行

2.2 htop - 增強版 top

bash
# Debian/Ubuntu 安裝
apt install htop

# CentOS/RHEL 安裝
yum install htop

htop 相比 top 的優勢:

  • 彩色顯示,更直觀的 CPU 進度條
  • 支持鼠標操作
  • 橫向滾動查看完整命令行
  • 進程樹視圖(F5)
  • 更友好的進程管理(F9 殺死,F7/F8 調整優先級)

2.3 mpstat - 多處理器統計

bash
# 安裝 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.80

2.4 負載均衡分析

理解 load average:

  • 負載值表示等待 CPU 的進程數(包括正在運行的)
  • 單核 CPU:負載 < 0.7 健康,0.7-1.0 需關注,>1.0 過載
  • 多核 CPU:將負載值除以核心數來判斷
  • 5分鐘和15分鐘負載更能反映真實趨勢
bash
# 查看 CPU 核心數
nproc

# 計算每核負載
# load_average / cpu_cores

2.5 CPU 性能優化策略

場景優化方向具體措施
用戶態 CPU 高優化應用代碼性能剖析(perf)、算法優化、減少計算
內核態 CPU 高優化系統調用減少 I/O 操作、優化網絡棧
上下文切換頻繁減少線程數線程池優化、減少鎖競爭
I/O 等待高優化存儲升級 SSD、緩存優化、異步 I/O
軟中斷高優化網絡網卡多隊列、RPS/RFS、中斷綁核

三、內存性能監控

3.1 free 命令

bash
# 人類可讀格式顯示
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 - 虛擬內存統計

bash
# 每秒採樣,共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/Obi塊設備讀入(塊/秒)
I/Obo塊設備寫出(塊/秒)
系統in中斷數/秒
系統cs上下文切換/秒

⚠️ 內存瓶頸信號: siso 持續大於 0,說明內存不足,系統頻繁使用交換分區。

3.3 進程內存分析

bash
# 查看進程內存佔用(按 RSS 排序)
ps aux --sort=-rss | head -20

# 查看指定進程的內存映射
pmap -x <PID>

# 查看進程的內存狀態
cat /proc/<PID>/status

3.4 內存優化策略

場景優化措施
物理內存不足增加內存、優化應用內存佔用
頻繁換頁調整 swappiness、減少內存佔用
緩存命中率低增加緩存、優化數據訪問模式
內存洩漏使用 valgrind/mtrace 定位洩漏點

調整 swappiness:

bash
# 查看當前值
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 統計

bash
# 安裝 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 監控

bash
# 安裝
apt install iotop

# 運行
iotop

# 只顯示有 I/O 活動的進程
iotop -o

4.3 磁盤性能測試

bash
# 測試讀取速度
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=direct

4.4 磁盤 I/O 優化策略

優化方向具體措施
硬件升級HDD → SSD、增加磁盤組成 RAID
文件系統選擇合適的文件系統(ext4/xfs/btrfs)
掛載參數noatime、data=writeback 等
I/O 調度SSD 用 none/mq-deadline,HDD 用 bfq
應用優化減少隨機 I/O、批量寫入、使用緩存

查看/修改 I/O 調度器:

bash
# 查看當前調度器
cat /sys/block/vda/queue/scheduler

# 臨時修改
echo mq-deadline > /sys/block/vda/queue/scheduler

五、網絡性能監控

5.1 ss / netstat - 連接統計

bash
# 查看所有 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 - 實時流量監控

bash
# 安裝
apt install iftop nload

# 監控指定網卡流量
iftop -i eth0

# 圖形化顯示流量
nload eth0

5.3 網絡延遲與丟包

bash
# 測試延遲與丟包
ping -c 100 -i 0.2 example.com

# 路由追蹤
traceroute example.com

# 使用 mtr 持續測試
mtr --report example.com

5.4 網絡性能優化

優化方向措施
TCP 參數調整 tcp_tw_reuse、tcp_fin_timeout
緩衝區調大 net.core.rmem_max、wmem_max
連接數調大文件描述符限制
網卡開啟多隊列、RSS、中斷綁核

常用內核參數優化:

bash
# 編輯 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 - 一站式監控

bash
# 安裝
apt install glances

# 運行
glances

# Web 模式(瀏覽器訪問 http://IP:61208)
glances -w

glances 集成了 CPU、內存、磁盤、網絡、進程等所有監控指標,界面友好,信息豐富。

6.2 dstat - 全能系統統計

bash
# 安裝
apt install dstat

# 綜合顯示(默認)
dstat

# 顯示更多信息
dstat -cdlmnpsy

6.3 sar - 歷史數據統計

bash
# sysstat 包自帶,需要開啟數據收集
# 編輯 /etc/default/sysstat,設置 ENABLED="true"

# 查看當天 CPU 歷史
sar -u

# 查看當天內存歷史
sar -r

# 查看當天磁盤 I/O
sar -b

# 查看指定日期
sar -u -f /var/log/sysstat/sa28

七、性能瓶頸定位實戰

7.1 排查思路

遇到系統慢時,按以下順序排查:

  1. 整體概覽: top / htop / glances 看整體負載
  2. CPU 分析: 負載高是用戶態還是內核態?是哪個進程?
  3. 內存分析: 內存夠不夠?有沒有頻繁換頁?
  4. I/O 分析: 是不是磁盤瓶頸?哪個進程在讀寫?
  5. 網絡分析: 網絡帶寬夠不夠?連接數是否正常?

7.2 常見問題定位

場景一:CPU 使用率高

bash
# 1. 找到佔用 CPU 高的進程
top  # 按 P 排序

# 2. 查看進程中的線程
top -H -p <PID>

# 3. 用 perf 分析熱點函數
perf top -p <PID>

場景二:系統負載高但 CPU 空閒

bash
# 1. vmstat 看是否是 I/O 等待
vmstat 1 5  # 看 wa 列

# 2. iotop 找高 I/O 進程
iotop -o

# 3. iostat 確認磁盤瓶頸
iostat -xz 1 5

場景三:內存不足

bash
# 1. 確認內存使用
free -h

# 2. 看是否有換頁
vmstat 1 5  # si/so 列

# 3. 找內存佔用高的進程
ps aux --sort=-rss | head -10

八、系統調優實戰建議

8.1 通用優化 checklist

8.2 文件描述符優化

bash
# 查看當前限制
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 系統監控與性能調優是運維工程師的核心技能。掌握好四大子系統的監控工具,建立系統化的排查思路,就能快速定位和解決絕大多數性能問題。

關鍵要點回顧:

  1. 監控先行 - 建立完善的監控體系,而不是出了問題才排查
  2. 數據說話 - 用工具量化性能指標,避免憑感覺調優
  3. 系統思維 - 性能問題往往是多因素的,需要綜合分析
  4. 持續優化 - 性能調優是持續迭代的過程,不是一勞永逸

下一篇我們將介紹 crontab 定時任務與自動化運維,學習如何將日常運維工作自動化,進一步提升運維效率。

最後更新於: