Linux 標準工具 free、top 僅顯示整體記憶體,無法精準統計單一進程佔用。本文提供 Shell 腳本,遍歷 /proc 讀取各進程 VmRSS (Resident Set Size),匯總輸出進程名與記憶體 (KB),並計算總計 (MB)。
/proc/PID/status 包含 VmRSS: 12345 kB 欄位,代表進程駐留實體記憶體。/proc 下數字目錄 (PID),提取 Name 與 VmRSS。mem_monitor.sh)#!/bin/bash
# 輸出檔案
OUTFILE="/root/script/pid.f"
echo -e "PidName\tMeMery_KB" > "$OUTFILE"
PIDPATH="/proc"
TOTAL_KB=0
cd "$PIDPATH" || exit 1
for PID in *; do
if [[ -d "$PID" && -f "$PID/status" ]]; then
# 提取 VmRSS (KB)
RSS=$(awk '/^VmRSS:/{print $2}' "$PID/status")
# 提取進程名
PNAME=$(awk '/^Name:/{print $2}' "$PID/status")
if [[ -n "$RSS" && "$RSS" -gt 0 ]]; then
echo -e "${PNAME}\t${RSS}" >> "$OUTFILE"
TOTAL_KB=$((TOTAL_KB + RSS))
fi
fi
done
TOTAL_MB=$((TOTAL_KB / 1024))
echo -e "\nTOTAL USED: ${TOTAL_MB} MB" >> "$OUTFILE"
cat "$OUTFILE"
chmod +x mem_monitor.sh
./mem_monitor.sh
# 輸出範例
PidName MeMery_KB
systemd 12345
sshd 2345
nginx 45678
...
TOTAL USED: 1234 MB
/proc/PID/status 無 VmRSS 或 Name 為 kthreadd 等可跳過。top -p PID 進階分析。cron 每 5 分鐘輸出至帶時間戳檔案,趨勢分析。ps 替代:ps -eo pid,comm,rss --sort=-rss | head -20 更簡潔,但無法獲取總計。/proc/PID/status。free -m 的 used。/proc 為宿主機視角,容器內進程 RSS 需結合 cgroup 限制查看。