付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、想獲取一下目標(biāo)機(jī)運(yùn)行時linux系統(tǒng)的硬件占用情況,寫了這幾個小程序,以后直接用了。方法就是讀取proc下的文件來獲取了。cpu使用率:/proc/stat,內(nèi)存使用情況:/proc/meminfo看程序:/*file:statusinfo.c*brief:從linux系統(tǒng)獲取cpu及內(nèi)存使用情況*version1.0*author抹黑*date2009年3月17日*/typedefstructPACKED/定義一個cpuoccupy的結(jié)構(gòu)體(charname20;定義一個char類型的數(shù)組名name有20個元素unsignedintuser;/定義一個無符號的int類型的userunsign
2、edintnice;/定義一個無符號的int類型的niceunsignedintsystem;/定義一個無符號的int類型的systemunsignedintidle;/定義一個無符號的int類型的idleCPU_OCCUPY;typedefstructPACKED/定義一個memoccupy的結(jié)構(gòu)體(charname20;定義一個char類型的數(shù)組名name有20個元素unsignedlongtotal;charname220;unsignedlongfree;MEM_OCCUPY;get_memoccupy(MEM_OCCUPY*mem)/對無類型get函數(shù)含有一個形參結(jié)構(gòu)體類弄的指針O(
3、FILE*fd;intn;charbuff256;MEM_OCCUPY*m;m=mem;fd=fopen(/proc/meminfo,r);fgets(buff,sizeof(buff),fd);fgets(buff,sizeof(buff),fd);fgets(buff,sizeof(buff),fd);fgets(buff,sizeof(buff),fd);sscanf(buff,%s%u%s,m-name,&m-total,m-name2);fgets(buff,sizeof(buff),fd);/從fd文件中讀取長度為buff的字符串再存到起始地址為buff這個空間里sscanf(bu
4、ff,%s%u,m-name2,&m-free,m-name2);fclose(fd);關(guān)閉文件fdintcal_cpuoccupy(CPU_OCCUPY*o,CPU_OCCUPY*n)(unsignedlongod,nd;unsignedlongid,sd;intcpu_use=0;od=(unsignedlong)(o-user+o-nice+o-system+o-idle);第一次(用戶+優(yōu)先級+系統(tǒng)+空閑)的時間再賦給odnd=(unsignedlong)(n-user+n-nice+n-system+n-idle);第二次(用戶+優(yōu)先級+系統(tǒng)+空閑)的時間再賦給odid=(unsig
5、nedlong)(n-user-o-user);用戶第一次和第二次的時間之差再賦給idsd=(unsignedlong)(n-system-o-system);/系統(tǒng)第一次和第二次的時間之差再賦給sdif(nd-od)!=0)cpu_use=(int)(sd+id)*10000)/(nd-od);/(用戶+系統(tǒng))乖100)除(第一次和第二次的時間差)再賦給g_cpu_usedelsecpu_use=0;/printf(cpu:%un,cpu_use);returncpu_use;get_cpuoccupy(CPU_OCCUPY*cpust)/對無類型get函數(shù)含有一個形參結(jié)構(gòu)體類弄的指針OFI
6、LE*fd;intn;charbuff256;CPU_OCCUPY*cpu_occupy;cpu_occupy=cpust;fd=fopen(/proc/stat,r);fgets(buff,sizeof(buff),fd);sscanf(buff,%s%u%u%u%u,cpu_occupy-name,&cpu_occupy-user,&cpu_occupy-nice,&cpu_occupy-system,&cpu_occupy-idle);fclose(fd);intmain()CPU_OCCUPYcpu_stat1;CPU_OCCUPYcpu_stat2;MEM_OCCUPYmem_sta
7、t;intcpu;/獲取內(nèi)存get_memoccupy(MEM_OCCUPY*)&mem_stat);第一次獲取cpu使用情況get_cpuoccupy(CPU_OCCUPY*)&cpu_stat1);sleep(10);第二次獲取cpu使用情況get_cpuoccupy(CPU_OCCUPY*)&cpu_stat2);計算cpu使用率cpu=cal_cpuoccupy(CPU_OCCUPY*)&cpu_stat1,(CPU_OCCUPY*)&cpu_stat2);return0;linux下如何獲取cpu的利用率proc文件系統(tǒng)是一個偽文件系統(tǒng),它只存在內(nèi)存當(dāng)中,而不占用外存空間。它以文件系
8、統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口。用戶和應(yīng)用程序可以通過proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)?!边@里將介紹如何從/proc文件系統(tǒng)中獲取與防火墻相關(guān)的一些性能參數(shù),以及如何通過/proc文件系統(tǒng)修改內(nèi)核的相關(guān)配置。1、從/proc文件系統(tǒng)獲取相關(guān)的性能參數(shù)cpu使用率:/proc/stat內(nèi)存使用情況:/proc/meminfo網(wǎng)絡(luò)負(fù)載信息:/proc/net/dev相應(yīng)的計算方法:(摘自:什么是proc文件系統(tǒng),見參考資料)(1) 處理器使用率(2) 內(nèi)存使用率(3) 流入流出數(shù)據(jù)包(4) 整體網(wǎng)絡(luò)負(fù)載這些數(shù)據(jù)分別要從/proc/stat、/proc/net/dev、/p
9、roc/meminfo三個文件中提取。如里有問題或?qū)σ崛〉臄?shù)據(jù)不太清楚,可以使用manproc來查看proc文件系統(tǒng)的聯(lián)機(jī)手冊。(1) 處理器使用率這里要從/proc/stat中提取四個數(shù)據(jù):用戶模式(user)、低優(yōu)先級的用戶模式(nice)、內(nèi)核模式(system)以及空閑的處理器時間(idle)。它們均位于/proc/stat文件的第一行。CPU的利用率使用如下公式來計算。CPU利用率100*(usernice+system)/(user+nice+system+idle)(2) 內(nèi)存使用率這里需要從/proc/meminfo文件中提取兩個數(shù)據(jù),當(dāng)前內(nèi)存的使用量(cmem)以及內(nèi)存總量
10、(amem)。內(nèi)存使用百分比=100*(cmem/umem)(3)網(wǎng)絡(luò)利用率為了得到網(wǎng)絡(luò)利用率的相關(guān)數(shù)據(jù),需要從/proc/net/dev文件中獲得兩個數(shù)據(jù):從本機(jī)輸出的數(shù)據(jù)包數(shù),流入本機(jī)的數(shù)據(jù)包數(shù)。它們都位于這個文件的第四行。性能收集程序開始記錄下這兩個數(shù)據(jù)的初始值,以后每次獲得這個值后均減去這個初始值即為從集群啟動開始從本節(jié)點(diǎn)通過的數(shù)據(jù)包。利用上述數(shù)據(jù)計算出網(wǎng)絡(luò)的平均負(fù)載,方法如下:平均網(wǎng)絡(luò)負(fù)載(輸出的數(shù)據(jù)包+流入的數(shù)據(jù)包)/22.通過/proc文件系統(tǒng)調(diào)整相關(guān)的內(nèi)核配置允許ip轉(zhuǎn)發(fā)/proc/sys/net/ipv4/ip_forward禁止ping/proc/sys/net/ipv4/
11、icmp_echo_ignore_all可以在命令行下直接往上述兩個文件“里頭寫入1來實現(xiàn)相關(guān)配置,如果寫入0將取消相關(guān)配置。不過在系統(tǒng)重啟以后,這些配置將恢復(fù)默認(rèn)設(shè)置,所以,如果想讓這些修改生效,可以把下面的配置直接寫入/etc/profile文件,或者其他隨系統(tǒng)啟動而執(zhí)行的程序文件中。echo1/proc/sys/net/ipv4/ip_forwardecho1/proc/sys/net/ipv4/icmp_echo_ignore_all如果需要獲取其他的性能參數(shù),或者需要對內(nèi)核進(jìn)行更多的配置,可以參考下面鏈接中的proc文件系統(tǒng)介紹,也可以直接通過manproc查看相關(guān)的信息。參考資料和
12、相關(guān)鏈接1什么是proc文件系統(tǒng)2 Linux下如何獲取cpu的使用率3 Exploringthe/proc/net/D4 /proc/netintroduction5使用ulimit和proc去調(diào)整系統(tǒng)參數(shù)/post/73.htmCPU都會有增加,要算注:文件里面是一個增量,每過一個時間間隔對應(yīng)的項使用了百分比,得用上上一次的狀態(tài)值這里計算cpu使用率是有問題的,需要使用上一狀態(tài)的值來計算。返回elf發(fā)表于2007-11-1609:06#4正確的計算方法是,等上一個時間:1、記錄某個時刻cpu的使用情況2、等上一個時間段3、再記錄此刻的cpu使用情
13、況4、計算總的時間片把第一次的所有cpu使用情況求和,得到j(luò)1把第二次的所有cpu使用情況求和,得到j(luò)2j2-j1得到這個時間段的所有時間片即total=j2-j1=第二次的所有列的和-第一次的所有列的和5、計算idle時間idle對應(yīng)第五列的數(shù)據(jù),用第二次的減去第一次的即可idle=第二次的第五列-第一次的第五列6、計算cpu使用率rate=(total-idle)/total見:我們在搞性能測試的時候,對后臺服務(wù)器的CPU利用率監(jiān)控是一個常用的手段。服務(wù)器的CPU利用率高,則表明服務(wù)器很繁忙。如果前臺響應(yīng)時間越來越大,而后臺CPU利用率始終上不去,說明在某個地方有瓶頸了,系統(tǒng)需要調(diào)優(yōu)。這個
14、是即使不懂技術(shù)的人都容易理解的事情。上面理解對嗎?我個人覺得不十分準(zhǔn)確。這個要看后臺你測試的進(jìn)程是什么類型的。如果是計算密集型的進(jìn)程,當(dāng)前端壓力越來越大的時候,很容易把CPU利用率打上去。但是如果是I/O網(wǎng)絡(luò)密集型的進(jìn)程,即使客戶端的請求越來越多,但是服務(wù)器CPU不一定能上去,這個是你要測試的進(jìn)程的自然屬性決定的。什么是CPU利用率呢?在Linux/Unix下,CPU利用率分為用戶態(tài),系統(tǒng)態(tài)和空閑態(tài),分別表示CPU處于用戶態(tài)執(zhí)行的時間,系統(tǒng)內(nèi)核執(zhí)行的時間,和空閑系統(tǒng)進(jìn)程執(zhí)行的時間。從計算機(jī)加電開始,CPU就一直忙個不停,所以CPU的利用率始終是100%。當(dāng)沒有用戶進(jìn)程需要執(zhí)彳T的時候,CPU就
15、執(zhí)行系統(tǒng)缺省的空閑進(jìn)程。我們所指的CPU利用率是指CPU執(zhí)行非系統(tǒng)空閑進(jìn)程的時間/CPU總的執(zhí)行時間。在Linux的內(nèi)核中,有一個全局變量:Jiffies。Jiffies代表時間。它的單位隨硬件平臺的不同而不同。系統(tǒng)里定義了一個常數(shù)HZ,代表每秒種最小時間間隔的數(shù)目。這樣jiffies的單位就是1/HZ。Intel平臺jiffies的單位是1/100秒,這就是系統(tǒng)所能分辨的最小時間間隔了。每個CPU時間片,Jiffies都要加1。CPU的利用率就是用執(zhí)行用戶態(tài)+系統(tǒng)態(tài)的Jiffies除以總的Jifffies來表示。在Linux系統(tǒng)中,CPU利用率的計算來源在/proc/stat文件,這個文件的
16、頭幾行記錄了每個CPU的用戶態(tài),系統(tǒng)態(tài),空閑態(tài)等狀態(tài)下的不同的Jiffies,常用的監(jiān)控軟件就是利用/proc/stat里面的這些數(shù)據(jù)來計算CPU的利用率的。包含了所有CPU活動的信息,該文件中的所有值都是從系統(tǒng)啟動開始累計到當(dāng)前時刻。/proc/stat/workbuilder$cat/proc/statcpu43266113295866564221459681714742335346cpu01230752462234941055436941658604615cpu111191741242385810550382069697123371cpu2103164355421530105521167
17、64032106334cpu39450431531777210557728521158424intr1065711094105727577992066040352700070020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000737695800000001054602000
18、000030000000000000000000000ctxt19067887btime1139187531processes270014procs_running1procs_blocked0輸出解釋CPU以及CPU0、CPU1、CPU2、CPU3每行的每個參數(shù)意思(以第一行為例)為:參數(shù)解釋user(432661)從系統(tǒng)啟動開始累計到當(dāng)前時刻,用戶態(tài)的CPU時間(單位:jiffies),不包含nice值為負(fù)進(jìn)程。1jiffies=0.01秒nice(13295)從系統(tǒng)啟動開始累計到當(dāng)前時刻,nice值為負(fù)的進(jìn)程所占用的CPU時間(單位:jiffies)system(86656)從系統(tǒng)啟動開始累計到當(dāng)前時刻,核心時間(單位:jiffies)idle(422145968)從系統(tǒng)啟動開始累計到當(dāng)前時刻,除硬盤IO等待時間以外其它等待時間(單位:jiffies)iowait(171474)從系統(tǒng)啟動開始累計到當(dāng)前時刻,硬盤IO等待時間(單位:jiffies),irq(233)從系統(tǒng)啟動開始累計到當(dāng)前時刻,硬中斷時間(單位:jiffies)softirq(5346)從系統(tǒng)啟動開始累計到當(dāng)前時刻,軟中斷時間(單位:jiffies)CPU時間=user+system+nice+id
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物分離原理試題及答案
- 糖尿病足部護(hù)理培訓(xùn)教材
- 2026 年初中英語《陳述句》專項練習(xí)與答案 (100 題)
- 2026年深圳中考語文知識體系構(gòu)建試卷(附答案可下載)
- 2026年深圳中考英語學(xué)困生補(bǔ)差試卷(附答案可下載)
- 《GA 2177-2024移民管理警察冬執(zhí)勤頭盔》專題研究報告
- 2026年大學(xué)大二(教育學(xué))教育統(tǒng)計學(xué)階段測試試題及答案
- 衛(wèi)生類崗位題庫及答案
- 2026年深圳中考生物沖刺名校專項試卷(附答案可下載)
- 面試財務(wù)題庫及答案解析
- 半導(dǎo)體安全培訓(xùn)課件
- 遼寧省錦州市2024-2025學(xué)年八年級下學(xué)期期末物理試題(含答案)
- 頂管施工臨時用電方案
- 廣東省惠州市高三上學(xué)期第一次調(diào)研考英語試題-1
- 瀘州老窖釀酒有限責(zé)任公司釀酒廢棄物熱化學(xué)能源化與資源化耦合利用技術(shù)環(huán)評報告
- 防范圍標(biāo)串標(biāo)行為操作指南
- 公司收款管理辦法
- 綜合能力測試題(含答案)
- 食用農(nóng)產(chǎn)品流通管理制度
- 啞終端設(shè)備管理制度
- 單位微信群規(guī)定管理制度
評論
0/150
提交評論