linux 的proc檔案系統
關於proc,可以通過 man proc 獲取詳細的說明。
執行 mount 命令,可以看到 proc 檔案系統的掛載資訊。
mount -t proc proc /proc
/proc 目錄下的檔案
/proc/cpuinifo CPU的資訊(型號、家族、快取大小等)
/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
------------------------------------------------------------------------------------------------------
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