Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux /proc 文件系統詳解:核心數據結構的用戶態窗口

編輯:Linux 教學

前言

/proc 是一個虛擬文件系統,不佔磁盤空間,掛載在內存中,提供內核數據結構的只讀/可寫接口。每個進程一個 /proc/PID/ 目錄,全局信息直接在 /proc/ 下。本文系統梳理高頻文件含義、讀取示例、監控腳本編寫與容器化注意事項。

一、進程級核心文件 (/proc/PID/)

文件含義典型用途
cmdline啟動命令行參數(以 \0 分隔)識別進程用途、容器入口點
cwd當前工作目錄(符號鏈接)定位進程操作目錄
environ環境變量(\0 分隔)排查配置注入、敏感信息洩露
exe可執行文件路徑(符號鏈接)驗證二進制完整性、發現替換
fd/文件描述符目錄(符號鏈接指向實際文件/管道/Socket)排查文件洩漏、Socket 連接對端
maps內存映射區域(起止地址、權限、偏移、設備、inode、路徑)分析堆/棧/共享庫/匿名映射、定位內存洩漏
smaps每個映射的詳細統計(Size、Rss、Pss、Shared_Clean/Dirty、Private_Clean/Dirty、Swap、KernelPageSize、MMUPageSize、Locked、VmFlags)精準計算進程實際物理內存佔用 (PSS)
status進程狀態人類可讀摘要(PID、PPID、State、Uid/Gid、VmPeak/VmSize/VmRSS/VmSwap、Threads、SigQ、SigPnd/ShdPnd/BlkPnd/IgnPnd/CgtPnd)快速概覽進程資源佔用、線程數、信號屏蔽
stat內核原始統計(供 top/ps 解析)腳本化采集
ioIO 統計(rchar/wchar/syscr/syscw/read_bytes/write_bytes/cancelled_write_bytes)定位 IO 密集型進程
limits資源限制(Max open files、Max processes、Address space、File size、Core file size...)排查「Too many open files」等限制問題
cgroup控制組路徑容器資源配額驗證、systemd slice 確認
ns/命名空間 inode 符號鏈接 (ipc/mnt/net/pid/user/uts/cgroup/time)容器隔離性驗證、nsenter 目標
oom_score / oom_score_adjOOM Killer 分數與調整值保護關鍵進程不被殺

二、系統級核心文件 (/proc/)

文件/目錄含義關鍵指標
cpuinfoCPU 型號、頻率、緩存、特性標志、bogomips核心數、架構、虛擬化特性
meminfo內存總量、可用、緩衝/緩存、Swap、HugePages、Slab、Committed_AS、PageTables、VmallocMemAvailable、SwapFree、HugePages_Free
loadavg1/5/15 分鐘負載、運行/總任務數、最近 PID負載趨勢
statCPU 時間片 (user/nice/system/idle/iowait/irq/softirq/steal/guest)、上下文切換、進程創建、中斷、啟動時間CPU 利用率分解、ctxt、processes
uptime啟動秒數、空閒秒數系統運行時長
version內核版本、編譯器、編譯時間內核版本確認
interrupts每 CPU 每中斷號計數、類型、驅動名中斷負載均衡、網卡/磁盤中斷親和性
softirqs軟中斷計數 (NET_RX/TX, BLOCK, TASKLET, SCHED, RCU...)網絡/塊設備軟中斷熱點
devices字符/塊設備主設備號與驅動名映射驅動加載驗證、mknod 參考
partitions分區主/次設備號、塊數、名稱磁盤分區掃描
mounts當前掛載點(設備、掛載點、類型、選項)比 /etc/mtab 更準確(含手工掛載)
filesystems內核支持的文件系統類型(nodev 表示無設備)模塊加載狀態
swapsSwap 設備/文件、大小、已用、優先級Swap 使用情況
vmstat內核級虛擬內存統計 (pgpgin/out, pswpin/out, pgalloc/free, pgfault/majfault...)頁面換入出、缺頁中斷
slabinfoSlab 分配器緩存統計(名稱、活躍/總對象數、大小、頁數)內核內存洩漏分析
modules已加載內核模塊(名稱、大小、引用計數、依賴、狀態、地址)lsmod 數據源
net/網絡協議棧統計(dev 設備統計、tcp/udp 連接表、arp、route、snmp 協議計數器)網絡流量、連接狀態、協議錯誤
sys/內核參數運行時調整接口(/proc/sys = /sys` 部分重疊)sysctl 底層實現
scsi/SCSI 設備層級信息存儲設備診斷
bus/總線設備 (PCI/USB/Input...)硬件枚舉
irq/中斷親和性配置(smp_affinity)中斷綁核優化

三、實用讀取技巧

# 1. 批量讀取進程 cmdline (以空格分隔顯示)
for pid in /proc/[0-9]*; do
    printf "%-6s %s\n" "${pid##*/}" "$(tr '\0' ' ' < "$pid/cmdline")"
done

# 2. 計算進程真實物理內存 (PSS) 總和
awk '/^Pss:/ {sum+=$2} END {print "Total PSS:", sum, "kB"}' /proc/[0-9]*/smaps 2>/dev/null

# 3. 監控系統負載變化
watch -n 1 'cat /proc/loadavg'

# 4. 查看網卡流量統計
cat /proc/net/dev | awk '$1 ~ /^eth|^ens|^enp/ {rx+=$2; tx+=$10} END {print "RX:", rx/1024/1024, "MB TX:", tx/1024/1024, "MB"}'

# 5. 實時觀察中斷分布
watch -n 1 'cat /proc/interrupts | grep -E "eth|nvme|irq"'

# 6. 獲取容器進程在宿主機的 PID
# 容器內 cat /proc/self/status | grep NSpid
# 最後一列即宿主機 PID

四、容器化環境注意事項

  • 宿主機可見性:宿主機 /proc 包含所有容器進程,容器內默認只見自己 PID 命名空間內的進程(--pid=host 可共享)。
  • 資源限制反映:/proc/meminfo 在容器內默認顯示宿主機內存(除非使用 lxcfs 或 cgroup v2 + proc_pid_cgroup 過濾),導致 free、top 誤導。Java 等依賴 MemTotal 計算堆大小的應用需配置 -XX:MaxRAMPercentage 或掛載 lxcfs。
  • 權限:非 root 只能讀取自己的 /proc/PID/,hidepid=2 掛載選項可隱藏他人進程目錄。

五、sysctl 運行時調優入口 (/proc/sys/)

# 典型調優
echo 1 > /proc/sys/vm/overcommit_memory          # 允許過度提交內存
echo 10 > /proc/sys/vm/swappiness                # 降低 Swap 傾向
echo 262144 > /proc/sys/vm/max_map_count         # 適配 Elasticsearch 等大映射應用
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse         # 復用 TIME_WAIT
echo 65535 > /proc/sys/fs/file-max               # 系統級文件描述符上限
echo 1000000 > /proc/sys/fs/nr_open             # 單進程文件描述符上限 (需 ulimit 配合)
# 永久生效請寫入 /etc/sysctl.d/99-custom.conf 並 sysctl --system

結語

/proc 是 Linux 內核狀態的「全息投影」,掌握核心文件含義、熟練用 cat/awk/watch 組合拳提取關鍵指標,是系統運維、性能分析、容器故障排查的基本功。建議將高頻讀取封裝為腳本或 Prometheus Exporter,構建自動化觀測體系。

Copyright © Windows教程網 All Rights Reserved