萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 系統效能監控入門:透過 /proc 檔案系統掌握 CPU、記憶體、磁碟、網路五大核心指標

Linux 將核心運行狀態以虛擬檔案形式暴露於 /proc 檔案系統,無需額外工具即可獲取豐富效能指標。本文詳細解析五大核心維度的資料來源、計算方法與實戰腳本,助您建立輕量級監控體系。

一、CPU 使用率:解析 /proc/stat

資料結構

cpu  256279030 0 11832528 1637168262 0 0 0 0 0 0
cpu0 123456789 0 5678901 818584131 ...
欄位依序:user、nice、system、idle、iowait、irq、softirq、steal、guest、guest_nice(單位:jiffies,通常 1/100 秒或 1/1000 秒)。

計算公式

採樣間隔 Δt(秒)內:

Total_delta = Σ(欄位_delta)
Idle_delta  = idle_delta + iowait_delta
CPU% = 100 * (Total_delta - Idle_delta) / Total_delta

一鍵腳本

cpu_usage() {
  read -r _ u n s i io irq sirq st g gn < /proc/stat
  sleep 1
  read -r _ u2 n2 s2 i2 io2 irq2 sirq2 st2 g2 gn2 < /proc/stat
  total=$((u2-u+n2-n+s2-s+i2-i+io2-io+irq2-irq+sirq2-sirq+st2-st+g2-g+gn2-gn))
  idle=$((i2-i+io2-io))
  echo $((100 * (total - idle) / total))
}

二、記憶體使用量:解析 /proc/meminfo

關鍵欄位

  • MemTotal:總物理記憶體
  • MemFree:完全未使用
  • MemAvailable:核心 3.14+ 關鍵指標,估算不觸發 swap 可分配記憶體(含可回收 page cache/slab)
  • Buffers、Cached、SReclaimable:可回收快取
  • SwapTotal/Free:交換空間

實用計算

# 真實使用率(排除可回收快取)
Used = MemTotal - MemAvailable
Usage% = 100 * Used / MemTotal

三、磁碟空間:statfs 系統呼叫

避免解析 df 輸出,直接呼叫 statfs() 獲取指定路徑分區資訊:

struct statfs st;
statfs("/var/lib/mysql", &st);
total_GB = st.f_bsize * st.f_blocks / 1024^3;
avail_GB = st.f_bsize * st.f_bavail / 1024^3;

關鍵差異:f_bfree 含 root 保留區塊,f_bavail 僅非 root 可用。

四、磁碟 I/O:/proc/diskstats 差值計算

欄位解析(kernel 4.18+)

major minor name reads reads_merged sectors_read ms_read
         writes writes_merged sectors_written ms_write
         ios_in_progress ms_io weighted_ms_io

核心指標

  • IOPS:(reads_delta + writes_delta) / Δt
  • Throughput (MB/s):(sectors_read_delta + sectors_write_delta) * 512 / 1024^2 / Δt
  • Avg Latency (ms):(ms_read_delta + ms_write_delta) / (reads_delta + writes_delta)
  • Utilization%:ms_io_delta / (Δt * 1000) * 100

五、網路流量:/proc/net/dev 差值計算

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
eth0: 12345678 12345    0    0    0     0          0         0  87654321 12345    0    0    0     0       0          0

核心指標

  • Rx/Tx Bytes/sec:bytes_delta / Δt
  • Rx/Tx Packets/sec:packets_delta / Δt
  • Error/Drop Rate:errs_delta / packets_delta * 100%

整合監控腳本範例

#!/bin/bash
# collect_metrics.sh - 每秒採樣輸出 JSON
while true; do
  ts=$(date +%s)
  cpu=$(cpu_usage)
  mem=$(awk '/MemTotal|MemAvailable/{printf "%s ", $2}' /proc/meminfo | awk '{print 100*($1-$2)/$1}')
  disk=$(df -B1 / | tail -1 | awk '{print 100*$3/$2}')
  rx=$(awk '/eth0:/{print $2}' /proc/net/dev)
  tx=$(awk '/eth0:/{print $10}' /proc/net/dev)
  sleep 1
  rx2=$(awk '/eth0:/{print $2}' /proc/net/dev)
  tx2=$(awk '/eth0:/{print $10}' /proc/net/dev)
  echo "{\"ts\":$ts,\"cpu\":$cpu,\"mem\":$mem,\"disk\":$disk,\"rx_bps\":$((rx2-rx)),\"tx_bps\":$((tx2-tx))}"
done

掌握 /proc 核心指標解析,即可在無代理、零依賴的環境下構建高頻監控系統,為容器編排、自動擴縮容、異常偵測提供最原始、最準確的數據源。

copyright © 萬盛學電腦網 all rights reserved