取得Linux系統的各種統計信息

取得Linux系統的各種統計信息


本文基於Linux 2.6.x內核


一、取得CPU信息(相關文件/proc/stat


在一個系統中的/proct/stat文件內容如下


$ cat /proc/stat

cpu 1039426 17799 111249 40729024 65373 8133 0

cpu0 1039426 17799 111249 40729024 65373 8133 0

intr 430346008 419773883 78233 0 5 5 1047009 7 4 1 2 0 5407218 66 0 3776594 262981

ctxt 307543240

btime 1173244314

processes 73837

procs_running 1

procs_blocked 0


其中以“cpu”開頭的兩行代表系統中有兩個CPU核心(我的機子是P4雙核的),每一行對應一個CPU核心。後面的數字表示從啓動到現在CPU花費在執行各項任務上的時間,單位是USER_HZ(一般是每秒一百次)。


各個數據項從左至右的函義如下:

user:普通進程在用戶模下下執行的時間。

nice:被提高優先級的進程在用戶模式下的執行時間。

system:進程在內核模式下的執行時間。

idle:空轉時間。

iowait:等待I/O完成的時間。

irq:處理中斷請求花費的時間。

softirq:處理軟中斷請求花費的時間。


"intr"一行給出了從啓動到現在的中斷服務次數,每一次可能的系統中斷。第一列是總的中斷服務次數;其它後續的列是各種特殊的中斷總數。

"ctxt"一行給出的是從啓動到現在所有的CPU進行上下文切換的總次數。

"btime"一行給出的是系統啓動的時間,從Unix紀元(19701100秒)開始的秒數。

"processes"一行給出的是創建的進程和線程總數,包括(但不限於)通過調用fork()clone()系統調用創建的那些進程和線程。

"procs_running"給出的是當前正在運行的進程數。

"procs_blocked"給出的是當前被阻塞的進程數,正在等待I/O完成。


二、取得虛擬內存統計信息(相關文件/proc/vmstat


在一個系統中/proc/vmstat文件顯示的是從內核導出的虛擬內存的統計信息。大多數參數在配置了VM_EVENT_COUNTERS選項後編譯內核纔有效。這是因爲大多數參數對於內核本身是沒用的,但對於調試和統計信息有用。


各行解釋如下:

$ cat vmstat


nr_dirty 3 #髒頁數

nr_writeback 0 #回寫頁數

nr_unstable 0 #不穩定頁數


nr_page_table_pages 894 #分配到頁表的頁數

nr_mapped 86854 #映射到文件的頁數

nr_slab 4492 #由內核切片器分配的頁數


pgpgin 2433258 #從啓動到現在讀入的內存頁數

pgpgout 2157211 #從啓動到現在換出的內存頁數


pswpin 43240 #從啓動到現在讀入的交換分區頁數

pswpout 69525 #從啓動到現在換出的交換分區頁數


#每個存儲區分配的頁數

pgalloc_high 0 #從啓動到現在高址存儲區分配的頁數

pgalloc_normal 170951852 #從啓動到現在普通存儲區分配的頁數

pgalloc_dma 1892977 #從啓動到現在DMA存儲區分配的頁數


pgfree 172846757 #從啓動到現在釋放的頁數

pgactivate 504252 #從啓動到現在激活的頁數

pgdeactivate 421772 #從啓動到現在去激活的頁數


pgfault 21166511 #從啓動到現在二級頁面錯誤數

pgmajfault 21868 #從啓動到現在一級頁面錯誤數


pgrefill_high 0 #從啓動到現在高址存儲區再填充的頁面數

pgrefill_normal 2280369 #從啓動到現在普通存儲區再填充的頁面數

pgrefill_dma 153904 #從啓動到現在DMA存儲區再填充的頁面數


pgsteal_high 0 #從啓動到現在回收高址存儲區用於其它目的的頁面數

pgsteal_normal 505128 #從啓動到現在回收普通存儲區用於其它目的的頁面數

pgsteal_dma 53444 #從啓動到現在回收DMA存儲區用於其它目的的頁面數


pgscan_kswapd_high 0 #從啓動到現在kswapd後臺進程掃描的高址存儲區頁面數

pgscan_kswapd_normal 579051 #從啓動到現在kswapd後臺進程掃描的普通存儲區頁面數

pgscan_kswapd_dma 59593 #從啓動到現在kswapd後臺進程掃描的DMA存儲區頁面數


pgscan_direct_high 0 #從啓動到現在高址存儲區被直接回收的頁面數

pgscan_direct_normal 131406 #從啓動到現在普通存儲區被直接回收的頁面數

pgscan_direct_dma 11526 #從啓動到現在DMA存儲區被直接回收的頁面數


pginodesteal 2191 #從啓動到現在通過釋放i節點回收的頁面數


slabs_scanned 498816 #從啓動到現在被掃描的切片數

kswapd_steal 454737 #從啓動到現在由kswapd回收用於其它目的的頁面數

kswapd_inodesteal 204421 #從啓動到現在由kswapd通過釋放i節點回收的頁面數

pageoutrun 13634 #從啓動到現在通過kswapd調用來回收的頁面數

allocstall 2513 #從啓動到現在請求直接回收的頁面數

pgrotated 69535 #從啓動到現在輪換的頁面數


三、取得物理內存信息(相關文件/proc/meminfo


/proc/meminfo文件是從內核導出的當前內存的使用情況。下面是一些關鍵項的解釋。


$cat /proc/meminfo

MemTotal: 515668 kB #總的物理內存大小

MemFree: 2684 kB #可用物理內存大小,因爲大量的內存被用於高速緩存,所以這個數比較小,這個值等於下面的HighFree + LowFree的值

Buffers: 8928 kB #緩衝區大小

Cached: 225684 kB #用於高速緩存的大小

SwapCached: 74196 kB #用於高速緩存的交換分區大小

Active: 412920 kB #活動內存量

Inactive: 73988 kB #不活動內存量

HighTotal: 0 kB #高階內存總數,高階內存是指超過860M(大約)物理內存以後的內存

HighFree: 0 kB #高階內存可用內存總數

LowTotal: 515668 kB #低階內存總數

LowFree: 2684 kB #低階內存區域的可用內存總數這是內核可以直接尋址的內存

SwapTotal: 522072 kB #交換分區大小

SwapFree: 365588 kB #可用交換分區大小

Dirty: 28 kB #髒內存,可能要寫到磁盤或者交換分區的內存

Writeback: 0 kB

Mapped: 360956 kB

Slab: 17244 kB

Committed_AS: 947452 kB #最壞情況下使用的內存數的一個估計值

PageTables: 3704 kB #內存頁表數

VmallocTotal: 499704 kB

VmallocUsed: 3088 kB

VmallocChunk: 496356 kB

HugePages_Total: 0

HugePages_Free: 0

Hugepagesize: 4096 kB


四、取得磁盤信息(相關文件/proc/diskstats或者/sys/block/hd?/stat


2.4.20(和某些更早的打補丁的版本)和2.5.45以來爲了幫助測量磁盤作業引入了更多的磁盤統計信息。諸如sariostat這樣的工具一般會說明這些和爲你做這些工作,但是如果你有興趣創建自己的工具,知道在哪裏取到這些信息將會非常有用。


$cat /proc/diskstats

...

22 0 hdc 159807 57894 6328277 1476593 179991 467858 5184662 2664218 0 886604 4140851

...


$cat /sys/block/hdc/stat

159807 57894 6328277 1476593 179989 467844 5184534 2664218 0 886604 4140851


/proc/diskstats文件比/sys/block/hdc/stat文件多3個域,從左至右分別對應主設備號,次設備號和設備名稱。後續的11個域在這兩個文件裏是相同的,它們的函義將在下面解釋。除了第9個域,所有的域都是從啓動時的累積值。

1個域:讀磁盤的次數,成功完成讀的總次數。

2個域:合併讀次數, field 6 – 合併寫次數。爲了效率可能會合並相鄰的讀和寫。從而兩次4K的讀在它最終被處理到磁盤上之前可能會變成一次8K的讀,才被計數(和排隊),因此只有一次I/O操作。這個域使你知道這樣的操作有多頻繁。

3個域:讀扇區的次數,成功讀過的扇區總次數。

4個域:讀花費的毫秒數,這是所有讀操作所花費的毫秒數(用__make_request()end_that_request_last()測量)。

5個域:寫完成的次數,成功寫完成的總次數。

7個域:寫扇區的次數,成功寫扇區總次數。

8個域:寫花費的毫秒數,這是所有寫操作所花費的毫秒數(用__make_request()end_that_request_last()測量)。

9個域:I/O的當前進度,只有這個域應該是0。當請求被交給適當的request_queue_t時增加和請求完成時減小。

10個域:花在I/O操作上的毫秒數,這個域會增長只要field 9不爲0

11個域:加權, 花在I/O操作上的毫秒數,在每次I/O開始,I/O結束,I/O合併時這個域都會增加。這可以給I/O完成時間和存儲那些可以累積的提供一個便利的測量標準。


五、取各個網卡的流量統計信息(相關文件/proc/net/dev


/proc/net/dev文件的每一行對應一個網卡的統計信息,各個域從左到右的內容如下:


網卡接口名(如eth0

#接收

收到的字節數

收到的數據包總數

收到的誤碼數

收到的丟失誤碼數

收到的FIFO誤碼數
收到的幀誤碼
收到的壓縮字節數
收到的多播誤碼數

#發送
傳輸的字節數

傳輸的數據包總數
傳輸誤碼總數

傳輸丟失誤碼

傳輸FIFO誤碼

傳輸衝突誤碼
傳輸載波誤碼

傳輸壓縮字節數


六、取得系統的運行時間(相關文件/proc/uptime


$ cat /proc/uptime

533263.88 519004.52


/proc/uptime文件裏包含兩個數字,第一個是系統正常運行的時間,第二個是從啓動到現在系統空轉的時間。從這裏可以看到我的系統絕大部份時間都是空轉,並不忙。


七、取得系統的負載信息(相關文件/proc/loadavg


$cat /proc/loadavg

0.50 0.48 0.29 1/128 12250


從左至右的內容分別是系統過去1分鐘的平均負載、過去5分鐘的平均負載、過去15分鐘的平均負載、正在運行的任務數/當前總任務數、上一次創建進程使用的PID號。

 
發佈了26 篇原創文章 · 獲贊 3 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章