/proc/stat每行格式:cpuN user nice system idle iowait ... (單位:jiffies,即核心嘀嗒數)。
範例:cpu0 256279030 0 11832528 1637168262
計算 1 秒間 CPU 負載:
# 讀取兩次間隔 1 秒
user_diff = user2 - user1
total_diff = (user+nice+sys+idle+iowait)_diff
%user = (user_diff * 100) / total_diff
# gkrellm 公式: ((200 * diff / HZ) + 1) / 2
HZ (CPU_TICKS_PER_SECOND) 通常為 100、250 或 1000,可用 getconf CLK_TCK 查詢。
/proc/meminfo關鍵欄位:
MemTotal、MemFree、MemAvailable (核心 3.14+ 可用記憶體估算)Buffers、Cached:可回收快取SwapTotal、SwapFree實際可用記憶體 ≈ MemFree + Buffers + Cached (或直接用 MemAvailable)。
statfs() 系統呼叫避免解析 /proc/mounts, /proc/partitions, df 等不一致來源,直接呼叫:
struct statfs buf;
statfs("/mount/point", &buf);
總空間 = buf.f_bsize * buf.f_blocks
可用空間 = buf.f_bsize * buf.f_bavail
/proc/diskstats 或 /proc/partitions欄位含義 (kernel 2.6+):major minor device reads reads_merged sectors_read ms_reading writes writes_merged sectors_written ms_writing io_in_progress ms_io ms_weighted。
採樣兩次取差值得每秒讀寫扇區數/請求數/等待時間。
/proc/net/dev每介面提供:Receive bytes packets errs drop ... Transmit bytes packets errs drop ...。
同樣採樣兩次取差值計算位元組/封包速率。