取得Linux系统的各种统计信息
本文基于Linux 2.6.x內核
一、取得CPU信息(相關文件/proc/stat)
在一個系統(tǒng)中的/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”開頭的兩行代表系統(tǒng)中有兩個CPU核心(我的機子是P4雙核的),每一行對應一個CPU核心。后面的數字表示從啟動到現(xiàn)在CPU花費在執(zhí)行各項任務上的時間,單位是USER_HZ(一般是每秒一百次)。各個數據項從左至右的函義如下: user:普通進程在用戶模下下執(zhí)行的時間。 nice:被提高優(yōu)先級的進程在用戶模式下的執(zhí)行時間。 system:進程在內核模式下的執(zhí)行時間。 idle:空轉時間。 iowait:等待I/O完成的時間。 irq:處理中斷請求花費的時間。 softirq:處理軟中斷請求花費的時間。"intr"一行給出了從啟動到現(xiàn)在的中斷服務次數,每一次可能的系統(tǒng)中斷。第一列是總的中斷服務次數;其它后續(xù)的列是各種特殊的中斷總數。 "ctxt"一行給出的是從啟動到現(xiàn)在所有的CPU進行上下文切換的總次數。 "btime"一行給出的是系統(tǒng)啟動的時間,從Unix紀元(1970年1月1日0時0秒)開始的秒數。 "processes"一行給出的是創(chuàng)建的進程和線程總數,包括(但不限于)通過調用fork()和clone()系統(tǒng)調用創(chuàng)建的那些進程和線程。 "procs_running"給出的是當前正在運行的進程數。 "procs_blocked"給出的是當前被阻塞的進程數,正在等待I/O完成。二、取得虛擬內存統(tǒng)計信息(相關文件/proc/vmstat)
在一個系統(tǒng)中/proc/vmstat文件顯示的是從內核導出的虛擬內存的統(tǒng)計信息。大多數參數在配置了VM_EVENT_COUNTERS選項后編譯內核才有效。這是因為大多數參數對于內核本身是沒用的,但對于調試和統(tǒng)計信息有用。
各行解釋如下:
$ cat vmstatnr_dirty 3 #臟頁數 nr_writeback 0 #回寫頁數 nr_unstable 0 #不穩(wěn)定頁數nr_page_table_pages 894 #分配到頁表的頁數 nr_mapped 86854 #映射到文件的頁數 nr_slab 4492 #由內核切片器分配的頁數pgpgin 2433258 #從啟動到現(xiàn)在讀入的內存頁數 pgpgout 2157211 #從啟動到現(xiàn)在換出的內存頁數pswpin 43240 #從啟動到現(xiàn)在讀入的交換分區(qū)頁數 pswpout 69525 #從啟動到現(xiàn)在換出的交換分區(qū)頁數#每個存儲區(qū)分配的頁數 pgalloc_high 0 #從啟動到現(xiàn)在高址存儲區(qū)分配的頁數 pgalloc_normal 170951852 #從啟動到現(xiàn)在普通存儲區(qū)分配的頁數 pgalloc_dma 1892977 #從啟動到現(xiàn)在DMA存儲區(qū)分配的頁數pgfree 172846757 #從啟動到現(xiàn)在釋放的頁數 pgactivate 504252 #從啟動到現(xiàn)在激活的頁數 pgdeactivate 421772 #從啟動到現(xiàn)在去激活的頁數pgfault 21166511 #從啟動到現(xiàn)在二級頁面錯誤數 pgmajfault 21868 #從啟動到現(xiàn)在一級頁面錯誤數pgrefill_high 0 #從啟動到現(xiàn)在高址存儲區(qū)再填充的頁面數 pgrefill_normal 2280369 #從啟動到現(xiàn)在普通存儲區(qū)再填充的頁面數 pgrefill_dma 153904 #從啟動到現(xiàn)在DMA存儲區(qū)再填充的頁面數pgsteal_high 0 #從啟動到現(xiàn)在回收高址存儲區(qū)用于其它目的的頁面數 pgsteal_normal 505128 #從啟動到現(xiàn)在回收普通存儲區(qū)用于其它目的的頁面數 pgsteal_dma 53444 #從啟動到現(xiàn)在回收DMA存儲區(qū)用于其它目的的頁面數pgscan_kswapd_high 0 #從啟動到現(xiàn)在kswapd后臺進程掃描的高址存儲區(qū)頁面數 pgscan_kswapd_normal 579051 #從啟動到現(xiàn)在kswapd后臺進程掃描的普通存儲區(qū)頁面數 pgscan_kswapd_dma 59593 #從啟動到現(xiàn)在kswapd后臺進程掃描的DMA存儲區(qū)頁面數pgscan_direct_high 0 #從啟動到現(xiàn)在高址存儲區(qū)被直接回收的頁面數 pgscan_direct_normal 131406 #從啟動到現(xiàn)在普通存儲區(qū)被直接回收的頁面數 pgscan_direct_dma 11526 #從啟動到現(xiàn)在DMA存儲區(qū)被直接回收的頁面數pginodesteal 2191 #從啟動到現(xiàn)在通過釋放i節(jié)點回收的頁面數slabs_scanned 498816 #從啟動到現(xiàn)在被掃描的切片數 kswapd_steal 454737 #從啟動到現(xiàn)在由kswapd回收用于其它目的的頁面數 kswapd_inodesteal 204421 #從啟動到現(xiàn)在由kswapd通過釋放i節(jié)點回收的頁面數 pageoutrun 13634 #從啟動到現(xiàn)在通過kswapd調用來回收的頁面數 allocstall 2513 #從啟動到現(xiàn)在請求直接回收的頁面數 pgrotated 69535 #從啟動到現(xiàn)在輪換的頁面數參考: https://www.kernel.org/doc/Documentation/vm/transhuge.txt
As the system ages, allocating huge pages may be expensive as the
system uses memory compaction to copy data around memory to free a
huge page for use. There are some counters in /proc/vmstat to help
monitor this overhead.
compact_stall is incremented every time a process stalls to run
memory compaction so that a huge page is free for use.
compact_success is incremented if the system compacted memory and
freed a huge page for use.
compact_fail is incremented if the system tries to compact memory
but failed.
compact_pages_moved is incremented each time a page is moved. If
this value is increasing rapidly, it implies that the system
is copying a lot of data to satisfy the huge page allocation.
It is possible that the cost of copying exceeds any savings
from reduced TLB misses.
compact_pagemigrate_failed is incremented when the underlying mechanism
for moving a page failed.
compact_blocks_moved is incremented each time memory compaction examines
a huge page aligned range of pages.
三、取得物理內存信息(相關文件/proc/meminfo)
/proc/meminfo文件是從內核導出的當前內存的使用情況。下面是一些關鍵項的解釋。
$cat /proc/meminfo MemTotal: 515668 kB #總的物理內存大小 MemFree: 2684 kB #可用物理內存大小,因為大量的內存被用于高速緩存,所以這個數比較小,這個值等于下面的HighFree + LowFree的值 Buffers: 8928 kB #緩沖區(qū)大小 Cached: 225684 kB #用于高速緩存的大小 SwapCached: 74196 kB #用于高速緩存的交換分區(qū)大小 Active: 412920 kB #活動內存量 Inactive: 73988 kB #不活動內存量 HighTotal: 0 kB #高階內存總數,高階內存是指超過860M(大約)物理內存以后的內存 HighFree: 0 kB #高階內存可用內存總數 LowTotal: 515668 kB #低階內存總數 LowFree: 2684 kB #低階內存區(qū)域的可用內存總數,這是內核可以直接尋址的內存 SwapTotal: 522072 kB #交換分區(qū)大小 SwapFree: 365588 kB #可用交換分區(qū)大小 Dirty: 28 kB #臟內存,可能要寫到磁盤或者交換分區(qū)的內存 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以來為了幫助測量磁盤作業(yè)引入了更多的磁盤統(tǒng)計信息。諸如sar和iostat這樣的工具一般會說明這些和為你做這些工作,但是如果你有興趣創(chuàng)建自己的工具,知道在哪里取到這些信息將會非常有用。
$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個域,從左至右分別對應主設備號,次設備號和設備名稱。后續(xù)的11個域在這兩個文件里是相同的,它們的函義將在下面解釋。除了第9個域,所有的域都是從啟動時的累積值。 第1個域:讀磁盤的次數,成功完成讀的總次數。 第2個域:合并讀次數, field 6 – 合并寫次數。為了效率可能會合并相鄰的讀和寫。從而兩次4K的讀在它最終被處理到磁盤上之前可能會變成一次8K的讀,才被計數(和排隊),因此只有一次I/O操作。這個域使你知道這樣的操作有多頻繁。 第3個域:讀扇區(qū)的次數,成功讀過的扇區(qū)總次數。 第4個域:讀花費的毫秒數,這是所有讀操作所花費的毫秒數(用__make_request()到end_that_request_last()測量)。 第5個域:寫完成的次數,成功寫完成的總次數。 第7個域:寫扇區(qū)的次數,成功寫扇區(qū)總次數。 第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完成時間和存儲那些可以累積的提供一個便利的測量標準。五、取各個網卡的流量統(tǒng)計信息(相關文件/proc/net/dev)
/proc/net/dev文件的每一行對應一個網卡的統(tǒng)計信息,各個域從左到右的內容如下:
網卡接口名(如eth0)
#接收 收到的字節(jié)數 收到的數據包總數 收到的誤碼數 收到的丟失誤碼數 收到的FIFO誤碼數 收到的幀誤碼 收到的壓縮字節(jié)數 收到的多播誤碼數 #發(fā)送 傳輸的字節(jié)數 傳輸的數據包總數 傳輸誤碼總數 傳輸丟失誤碼 傳輸FIFO誤碼 傳輸沖突誤碼 傳輸載波誤碼 傳輸壓縮字節(jié)數六、取得系統(tǒng)的運行時間(相關文件/proc/uptime)
$ cat /proc/uptime 533263.88 519004.52/proc/uptime文件里包含兩個數字,第一個是系統(tǒng)正常運行的時間,第二個是從啟動到現(xiàn)在系統(tǒng)空轉的時間。從這里可以看到我的系統(tǒng)絕大部份時間都是空轉,并不忙。
七、取得系統(tǒng)的負載信息(相關文件/proc/loadavg)
$cat /proc/loadavg 0.50 0.48 0.29 1/128 12250從左至右的內容分別是系統(tǒng)過去1分鐘的平均負載、過去5分鐘的平均負載、過去15分鐘的平均負載、正在運行的任務數/當前總任務數、上一次創(chuàng)建進程使用的PID號。
轉載于:https://www.cnblogs.com/muahao/p/6768048.html
總結
以上是生活随笔為你收集整理的取得Linux系统的各种统计信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 气候变迁给社会带来什么变化?
- 下一篇: 程序员版本管理知识 Git 详细整理