學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 >

Linux系統(tǒng)運(yùn)行的各種參數(shù)

時(shí)間: 若木1 分享
1、CPU
在文件”/proc/stat”里面就包含了CPU的信息。每一個(gè)CPU的每一tick用在什么地方都在這個(gè)文件里面記著。后面的數(shù)字含義分別是: user、nice、sys、idle、iowait。有些版本的kernel沒(méi)有iowait這一項(xiàng)。這些數(shù)值表示從開(kāi)機(jī)到現(xiàn)在,CPU的每tick用 在了哪里。例如:
cpu0 256279030 0 11832528 1637168262
就是cpu0從開(kāi)機(jī)到現(xiàn)在有 256279030 tick用在了user消耗,11832528用在了sys消耗。所以如果想計(jì)算單位時(shí)間(例如1s)里面CPU的負(fù)載,那只需要計(jì)算1秒前后數(shù)值的差除 以每一秒的tick數(shù)量就可以了。gkrellm就是這樣實(shí)現(xiàn)的:((200 * (v2 - v1) / CPU_TICKS_PER_SECOND) + 1) /2
例如,第一次讀取/proc/stat,user的值是256279030;一秒以 后再讀一次,值是256289030,那么CPU在這一秒的user消耗就是:((200 * (256289030 - 256279030) / CPU_TICKS_PER_SECOND) + 1) /2 = ((10000 * 200 / 1000000) + 1) / 2 = 1%了。
2、內(nèi)存消耗
文件”/proc/meminfo”里面包含的就是內(nèi)存的信息,還包括了swap的信息。例如:
$ cat /proc/meminfo
total: used: free: shared: buffers: cached:
Mem: 1057009664 851668992 205340672 0 67616768 367820800
Swap: 2146787328 164429824 1982357504
MemTotal: 1032236 kB
MemFree: 200528 kB
MemShared: 0 kB
……
不過(guò)從gkrellm的源代碼看,有些版本沒(méi)有前面那兩行統(tǒng)計(jì)的信息,只能夠根據(jù)下面的Key: Value這種各式的數(shù)據(jù)收集。
3、磁盤(pán)空間
從gkrellm的源代碼看,這個(gè)是一個(gè)很復(fù)雜的數(shù)據(jù)。磁盤(pán)分區(qū)的數(shù)據(jù)有可能分布在:/proc/mounts、/proc/diskstats、 /proc/partitions等等。而且如果想要檢查某幾個(gè)特定的路徑,還需要通過(guò)mount、df等命令的幫助。為了減少麻煩,這個(gè)數(shù)據(jù)我就直接用 statfs函數(shù)直接獲得了。
int statfs(const char *path, struct statfs *buf);
這個(gè)函數(shù)只需要輸入需要檢查的路徑名稱,就可以返回這個(gè)路徑所在的分區(qū)的空間使用情況:
總空間:buf.f_bsize * buf.f_blocks
空余空間:buf.f_bsize * buf.f_bavail
4、磁盤(pán)I/O
磁盤(pán)I/O的數(shù)據(jù)也同樣比較復(fù)雜,有些版本看/proc/diskstats,有些版本看/proc/partitions,還有些版本至今我也不知道在那里看……不過(guò)可以看到數(shù)據(jù)的版本也像CPU那樣,需要隔一段時(shí)間取值,兩次取值的差就是流量。
5、網(wǎng)絡(luò)流量
網(wǎng)絡(luò)流量也是五花八門,不過(guò)基本上都可以在/proc/net/dev里面獲得。同樣也是需要兩次取值取其差作為流量值。
23805