天天看點

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

繼續閱讀