1. 程式人生 > >linux 的proc檔案系統

linux 的proc檔案系統

linux中的/proc檔案系統是一個虛擬的檔案系統,由核心在執行時動態生成。它提供了核心執行時的配置和狀態資訊。使用者可以通過這些檔案來獲取、或修改核心的資訊。
關於proc,可以通過 man proc 獲取詳細的說明。

執行 mount 命令,可以看到 proc 檔案系統的掛載資訊。

mount -t proc proc /proc

/proc 目錄下的檔案

/proc/cpuinifo       CPU的資訊(型號、家族、快取大小等)

/proc/meminfo    實體記憶體、交換空間
/proc/mounts      已載入的檔案系統的列表
/proc/devices  可用裝置的列表
/proc/filesystems   被支援的檔案系統
/proc/modules   已載入的模組
/proc/virsion   核心版本
/proc/cmdline   系統啟動時輸入的核心命令列引數
/proc/XXX    XXX是指以數字編號的目錄,有不少這樣的目錄,每一個目錄表示一個程序(即執行緒組)。
/proc/swaps   要獲知swap空間的使用情況
/proc/uptime   獲取系統的正常執行時間
/proc/fs/nfsd/exports  列出由NFS共享的檔案系統
/proc/kmsg  該檔案被作為核心日誌資訊源,它可以被作為一個系統資訊呼叫的介面使用 /proc/self -- 到當前程序/proc目錄的符號連結,通過這個目錄可以獲取當前執行程序的資訊。
/proc/pci -- 掛接在PCI總線上的裝置
/proc/tty/driver/serial --串列埠配置、統計資訊
/proc/version -- 系統版本資訊
/proc/sys/kernel/ostype
/proc/sys/kernel/osrelease
/proc/sys/kernel/version
/proc/sys/kernel/hostname -- 主機名
/proc/sys/kernel/domainname -- 域名
/proc/partitions -- 硬碟裝置分割槽資訊
/proc/sys/dev/cdrom/info -- CDROM資訊
/proc/locks -- 當前系統中所有的檔案鎖
/proc/loadavg -- 系統負荷資訊
/proc/uptime -- 系統啟動後的執行時間

----------------------------------------------------------------------------------------------------------------------------------------------------------

檢視系統記憶體資訊的命令:   cat /proc/meminfo

MemTotal:     3266180 kB
MemFree:        17456kB
Buffers:       111328kB
Cached:       2664024kB
SwapCached:         0kB
Active:        467236kB
Inactive:     2644928 kB
HighTotal:         0kB
HighFree:          0kB
LowTotal:     3266180 kB
LowFree:        17456kB
SwapTotal:    2048276kB
SwapFree:     1968116 kB
Dirty:            8kB
Writeback:         0kB
Mapped:        345360kB
Slab:         112344kB
Committed_AS:   535292kB
PageTables:      2340 kB
VmallocTotal: 536870911 kB
VmallocUsed:    272696kB
VmallocChunk: 536598175 kB
HugePages_Total:    0
HugePages_Free:     0
Hugepagesize:    2048kB

解析:

MemTotal: 所有可用RAM大小(即實體記憶體減去一些預留位和核心的二進位制程式碼大小)
MemFree: LowFree與HighFree的總和,被系統留著未使用的記憶體
Buffers: 用來給檔案做緩衝大小
Cached: 被高速緩衝儲存器(cache memory)用的記憶體的大小(等於 diskcache minus SwapCache ).
SwapCached:被高速緩衝儲存器(cache memory)用的交換空間的大小
           已經被交換出來的記憶體,但仍然被存放在swapfile中。用來在需要的時候很快的被替換而不需要再次開啟I/O埠。
Active: 在活躍使用中的緩衝或高速緩衝儲存器頁面檔案的大小,除非非常必要否則不會被移作他用.
Inactive: 在不經常使用中的緩衝或高速緩衝儲存器頁面檔案的大小,可能被用於其他途徑.
HighTotal:
HighFree: 該區域不是直接對映到核心空間。核心必須使用不同的手法使用該段記憶體。
LowTotal:
LowFree: 低位可以達到高位記憶體一樣的作用,而且它還能夠被核心用來記錄一些自己的資料結構。Among many
         other things, it is where everything from the Slab is
         allocated.  Bad things happen when you're out of lowmem.

SwapTotal: 交換空間的總大小
SwapFree: 未被使用交換空間的大小
Dirty: 等待被寫回到磁碟的記憶體大小。
Writeback: 正在被寫回到磁碟的記憶體大小。
AnonPages:未對映頁的記憶體大小
Mapped: 裝置和檔案等對映的大小。
Slab: 核心資料結構快取的大小,可以減少申請和釋放記憶體帶來的消耗。
SReclaimable:可收回Slab的大小
SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
PageTables:管理記憶體分頁頁面的索引表的大小。
NFS_Unstable:不穩定頁表的大小
VmallocTotal: 可以vmalloc虛擬記憶體大小
VmallocUsed: 已經被使用的虛擬記憶體大小。
VmallocChunk: largest contigious block of vmalloc area which is free

------------------------------------------------------------------------------------------------------

/proc/stat 檔案的欄位解析:

 user    systemnice    idle      iowait  irq    softirq cpu  17906755 86377 53312329 1322524322 29311124 101704 1096939
cpu0 4665564  22883  13417357330376020  7206071 99986  297154
cpu1 4488897  20352  13351971330749128  7202582 0     271926
cpu2 4434851  22675  13302518330622140  7455115 1718   245786
cpu3 4317443  20467  13240483330777034  7447356 0     282073 輸出解釋
CPU 以及CPU0、CPU1、CPU2、CPU3每行的每個引數意思(以第一行為例)為:

引數 解釋
user (432661) 從系統啟動開始累計到當前時刻,使用者態的CPU時間(單位:jiffies) ,不包含 nice值為負程序。1jiffies=0.01秒
nice (13295) 從系統啟動開始累計到當前時刻,nice值為負的程序所佔用的CPU時間(單位:jiffies)
system (86656) 從系統啟動開始累計到當前時刻,核心時間(單位:jiffies)
idle (422145968) 從系統啟動開始累計到當前時刻,除硬碟IO等待時間以外其它等待時間(單位:jiffies)
iowait (171474) 從系統啟動開始累計到當前時刻,硬碟IO等待時間(單位:jiffies) ,
irq (233) 從系統啟動開始累計到當前時刻,硬中斷時間(單位:jiffies)
softirq (5346) 從系統啟動開始累計到當前時刻,軟中斷時間(單位:jiffies)

CPU時間=user+system+nice+idle+iowait+irq+softirq

“intr”這行給出中斷的資訊,第一個為自系統啟動以來,發生的所有的中斷的次數;然後每個數對應一個特定的中斷自系統啟動以來所發生的次數。
“ctxt”給出了自系統啟動以來CPU發生的上下文交換的次數。
“btime”給出了從系統啟動到現在為止的時間,單位為秒。
“processes (total_forks) 自系統啟動以來所建立的任務的個數目。
“procs_running”:當前執行佇列的任務的數目。
“procs_blocked”:當前被阻塞的任務的數目。

那麼CPU利用率可以使用以下兩個方法。先取兩個取樣點,然後計算其差值:
cpu usage=(idle2-idle1)/(cpu2-cpu1)*100
cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)*100

以下用分別用bash和perl做的一個cpu利用率的計算:
total_0USER[0]+NICE[0]+SYSTEM[0]+IDLE[0]+IOWAIT[0]+IRQ[0]+SOFTIRQ[0]
total_1=USER[1]+NICE[1]+SYSTEM[1]+IDLE[1]+IOWAIT[1]+IRQ[1]+SOFTIRQ[1]
cpu usage=(IDLE[0]-IDLE[1]) / (total_0-total_1) * 100