版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、想獲取一下目標(biāo)機(jī)運(yùn)行時(shí)linux系統(tǒng)的硬件占用情況,寫(xiě)了這幾個(gè)小程序,以后直接用了。方法就是讀取proc下的文件來(lái)獲取了。 cpu使用率: /proc/stat ,內(nèi)存使用情況: /proc/meminfo看程序 :/* file: statusinfo.c* brief: 從linux系統(tǒng)獲取cpu及
2、內(nèi)存使用情況* version 1.0* author 抹黑* date 2009年3月17日*/typedef struct PACKED /定義一個(gè)cpu occupy的結(jié)構(gòu)體char name20;
3、0; /定義一個(gè)char類(lèi)型的數(shù)組名name有20個(gè)元素unsigned int user; /定義一個(gè)無(wú)符號(hào)的int類(lèi)型的userunsigned int nice; /定義一個(gè)無(wú)符號(hào)的int類(lèi)型的niceunsigned int system;/定義一個(gè)無(wú)符號(hào)的int類(lèi)型的systemunsigned int idle; /定義一個(gè)無(wú)符號(hào)的int類(lèi)型的idleCPU_OCCUPY;typedef struct PACKED /定義一個(gè)mem occ
4、upy的結(jié)構(gòu)體char name20; /定義一個(gè)char類(lèi)型的數(shù)組名name有20個(gè)元素unsigned long total; char name220;unsigned long free; MEM_OCCUPY;get_memoccupy (MEM
5、_OCCUPY *mem) /對(duì)無(wú)類(lèi)型get函數(shù)含有一個(gè)形參結(jié)構(gòu)體類(lèi)弄的指針O FILE *fd; int n; char buff256; M
6、EM_OCCUPY *m; m=mem;
7、0;
8、0; fd = fopen ("/proc/meminfo", "r"); fgets (buff, sizeof(buff), fd); fgets (buff, sizeo
9、f(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(bu
10、ff), fd); /從fd文件中讀取長(zhǎng)度為buff的字符串再存到起始地址為buff這個(gè)空間里 sscanf (buff, "%s %u", m->name2, &m->free, m->name2); fclose(fd); /關(guān)閉文件fdint cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n)
11、 unsigned long od, nd; unsigned long id, sd; int cpu_use = 0; od = (unsigned long) (o->user + o->nice + o->system +o->idle);/第一次(用戶(hù)+優(yōu)先級(jí)+系統(tǒng)
12、+空閑)的時(shí)間再賦給od nd = (unsigned long) (n->user + n->nice + n->system +n->idle);/第二次(用戶(hù)+優(yōu)先級(jí)+系統(tǒng)+空閑)的時(shí)間再賦給od id = (unsigned long) (n->user - o->user); /用戶(hù)第一次和第二次的時(shí)間之差再賦給id sd = (uns
13、igned long) (n->system - o->system);/系統(tǒng)第一次和第二次的時(shí)間之差再賦給sd if(nd-od) != 0) cpu_use = (int)(sd+id)*10000)/(nd-od); /(用戶(hù)+系統(tǒng))乖100)除(第一次和第二次的時(shí)間差)再賦給g_cpu_used else cpu_use = 0; /printf("cpu: %un",cpu_use); &
14、#160; return cpu_use;get_cpuoccupy (CPU_OCCUPY *cpust) /對(duì)無(wú)類(lèi)型get函數(shù)含有一個(gè)形參結(jié)構(gòu)體類(lèi)弄的指針O FILE *fd; int n; char
15、 buff256; CPU_OCCUPY *cpu_occupy; cpu_occupy=cpust;
16、60;
17、60; fd = fopen ("/proc/stat", "r"); fgets (buff, sizeof(buff), fd);
18、60; sscanf (buff, "%s %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle); fclose(fd); int main()
19、0; CPU_OCCUPY cpu_stat1; CPU_OCCUPY cpu_stat2; MEM_OCCUPY mem_stat; int cpu; /獲取內(nèi)存 get_memoccupy (MEM_OCCUPY *)&mem_stat); /第一次獲取cpu使用情況
20、0; get_cpuoccupy(CPU_OCCUPY *)&cpu_stat1); sleep(10); /第二次獲取cpu使用情況 get_cpuoccupy(CPU_OCCUPY *)&cpu_stat2); /計(jì)算cpu使用率 cpu = cal_cpuoccupy (CPU
21、_OCCUPY *)&cpu_stat1, (CPU_OCCUPY *)&cpu_stat2); return 0; linux下如何獲取cpu的利用率"proc文件系統(tǒng)是一個(gè)偽文件系統(tǒng),它只存在內(nèi)存當(dāng)中,而不占用外存空間。它以文件系統(tǒng)的方式為訪問(wèn)系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口。用戶(hù)和應(yīng)用程序可以通過(guò)proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。"這里將介紹如何從/proc文件系統(tǒng)中獲取與防火墻相關(guān)的一些性能參數(shù),以及如何通過(guò)/proc文件系統(tǒng)修改內(nèi)核的相關(guān)配置。&
22、#160;1、從/proc文件系統(tǒng)獲取相關(guān)的性能參數(shù) cpu使用率: /proc/stat 內(nèi)存使用情況: /proc/meminfo 網(wǎng)絡(luò)負(fù)載信息: /proc/net/dev 相應(yīng)的計(jì)算方法:(摘自:什么是proc文件系統(tǒng),見(jiàn)參考資料) (1) 處理器使用率 (2) 內(nèi)存使用率 (3) 流入流出數(shù)據(jù)包 (4)&
23、#160; 整體網(wǎng)絡(luò)負(fù)載 這些數(shù)據(jù)分別要從/proc/stat、/proc/net/dev、/proc/meminfo三個(gè)文件中提取。如里有問(wèn)題或?qū)σ崛〉臄?shù)據(jù)不太清楚,可以使用man proc來(lái)查看proc文件系統(tǒng)的聯(lián)機(jī)手冊(cè)。 (1) 處理器使用率 這里要從/proc/stat中提取四個(gè)數(shù)據(jù):用戶(hù)模式(user)、低優(yōu)先級(jí)的用戶(hù)模式(nice)、內(nèi)核模式(system)以及空閑的處理器時(shí)間(idle)。它們均位于/proc/stat文件的第一行。CPU的利用率使用如下公式來(lái)計(jì)算。 CPU利用率
24、 = 100 *(user + nice + system)/(user + nice + system + idle) (2) 內(nèi)存使用率 這里需要從/proc/meminfo文件中提取兩個(gè)數(shù)據(jù),當(dāng)前內(nèi)存的使用量(cmem)以及內(nèi)存總量(am
25、em)。 內(nèi)存使用百分比 = 100 * (cmem / umem) (3)網(wǎng)絡(luò)利用率 為了得到網(wǎng)絡(luò)利用率的相關(guān)數(shù)據(jù),需要從/proc/net/dev文件中獲得兩個(gè)數(shù)據(jù):從本機(jī)輸出的數(shù)據(jù)包數(shù),流入本機(jī)的數(shù)據(jù)包數(shù)。它們都位于這個(gè)文件的第四行。 性能收集程序開(kāi)始記錄下這兩個(gè)數(shù)據(jù)的初始值,以后每次獲得這個(gè)值后均減去這個(gè)初始值即為從集群?jiǎn)?dòng)開(kāi)始從本節(jié)點(diǎn)通過(guò)的數(shù)據(jù)包。 利用上述數(shù)據(jù)計(jì)算出網(wǎng)絡(luò)的平均負(fù)載,方法如下:
26、 平均網(wǎng)絡(luò)負(fù)載 = (輸出的數(shù)據(jù)包+流入的數(shù)據(jù)包) / 2 2. 通過(guò)/proc文件系統(tǒng)調(diào)整相關(guān)的內(nèi)核配置 允許ip轉(zhuǎn)發(fā) /proc/sys/net/ipv4/ip_forward 禁止ping /proc/sys/net/ipv4/icmp_echo_ignore_all 可以在命令行下直接往上述兩個(gè)“文件”里頭寫(xiě)入"1"來(lái)實(shí)現(xiàn)相關(guān)配置,如果寫(xiě)入"0"
27、;將取消相關(guān)配置。不過(guò)在系統(tǒng)重啟以后,這些配置將恢復(fù)默認(rèn)設(shè)置,所以,如果想讓這些修改生效,可以把下面的配置直接寫(xiě)入/etc/profile文件,或者其他隨系統(tǒng)啟動(dòng)而執(zhí)行的程序文件中。 echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 如果需要獲取其他的性能參數(shù),或者需要對(duì)內(nèi)核進(jìn)行更多的配置,可以參考下面鏈接中的proc文件系統(tǒng)介紹,也可以直接通過(guò)man proc查看相關(guān)的信息。 參考資料和相關(guān)鏈接 1 什么是
28、proc文件系統(tǒng) 2 Linux下如何獲取cpu的使用率 3 Exploring the /proc/net/ Directory 4 /proc/net introduction 5 使用ulimit和proc去調(diào)整系統(tǒng)參數(shù) /post/73.htm 注:文件里面是一個(gè)增量,每過(guò)一個(gè)時(shí)間間隔對(duì)應(yīng)的項(xiàng)使用了CPU都會(huì)有增加,要算百分比,得用上上一次的狀態(tài)值. 這里計(jì)算cpu使用率是有問(wèn)題的,需要使用上一狀態(tài)的值來(lái)計(jì)算。 返回
29、 elf 發(fā)表于 2007-11-16 09:06 #4 正確的計(jì)算方法是,等上一個(gè)時(shí)間: 1、記錄某個(gè)時(shí)刻cpu的使用情況 2、等上一個(gè)時(shí)間段 3、再記錄此刻的cpu使用情況 4、計(jì)算總的時(shí)間片 把第一次的所有cpu使用情況求和,得到j(luò)1 把第二次的所有cpu使用情況求和,得到j(luò)2 j2-j1得到這個(gè)時(shí)間段的所有時(shí)間片 即total=j2-j1=第二次的所有列的和-第一次的所有列的和 5、計(jì)算idle時(shí)間 idle對(duì)應(yīng)第五列的數(shù)據(jù),用第二次的減去第一次的即可
30、160;idle=第二次的第五列-第一次的第五列 6、計(jì)算cpu使用率 rate=(total-idle)/total 見(jiàn): 我們?cè)诟阈阅軠y(cè)試的時(shí)候,對(duì)后臺(tái)服務(wù)器的CPU利用率監(jiān)控是一個(gè)常用的手段。服務(wù)器的CPU利用率高,則表明服務(wù)器很繁忙。如果前臺(tái)響應(yīng)時(shí)間越來(lái)越大,而后臺(tái)CPU利用率始終上不去,說(shuō)明在某個(gè)地方有瓶頸了,系統(tǒng)需要調(diào)優(yōu)。這個(gè)是即使不懂技術(shù)的人都容易理解的事情。 上面理解對(duì)嗎?我個(gè)人覺(jué)得不十分準(zhǔn)確。這個(gè)要看后臺(tái)你測(cè)試的進(jìn)程是什么類(lèi)型的。如果是計(jì)算密集型的進(jìn)程,當(dāng)前端壓力越來(lái)越大的時(shí)候,很容易把CPU利用率打上去。但是如果是I/O網(wǎng)絡(luò)
31、密集型的進(jìn)程,即使客戶(hù)端的請(qǐng)求越來(lái)越多,但是服務(wù)器CPU不一定能上去,這個(gè)是你要測(cè)試的進(jìn)程的自然屬性決定的。 什么是CPU利用率呢?在Linux/Unix下,CPU利用率分為用戶(hù)態(tài),系統(tǒng)態(tài)和空閑態(tài),分別表示CPU處于用戶(hù)態(tài)執(zhí)行的時(shí)間,系統(tǒng)內(nèi)核執(zhí)行的時(shí)間,和空閑系統(tǒng)進(jìn)程執(zhí)行的時(shí)間。從計(jì)算機(jī)加電開(kāi)始,CPU就一直忙個(gè)不停,所以CPU的利用率始終是100%。當(dāng)沒(méi)有用戶(hù)進(jìn)程需要執(zhí)行的時(shí)候,CPU就執(zhí)行系統(tǒng)缺省的空閑進(jìn)程。我們所指的CPU利用率是指CPU執(zhí)行非系統(tǒng)空閑進(jìn)程的時(shí)間 / CPU總的執(zhí)行時(shí)間。 在Linux的內(nèi)核中,有一個(gè)全局變量:Jiffies。 Jiffies代表時(shí)間。
32、它的單位隨硬件平臺(tái)的不同而不同。系統(tǒng)里定義了一個(gè)常數(shù)HZ,代表每秒種最小時(shí)間間隔的數(shù)目。這樣jiffies的單位就是 1/HZ。Intel平臺(tái)jiffies的單位是1/100秒,這就是系統(tǒng)所能分辨的最小時(shí)間間隔了。每個(gè)CPU時(shí)間片,Jiffies都要加1。 CPU的利用率就是用執(zhí)行用戶(hù)態(tài)+系統(tǒng)態(tài)的Jiffies除以總的Jifffies來(lái)表示。 在Linux系統(tǒng)中,CPU利用率的計(jì)算來(lái)源在/proc/stat文件,這個(gè)文件的頭幾行記錄了每個(gè)CPU的用戶(hù)態(tài),系統(tǒng)態(tài),空閑態(tài)等狀態(tài)下的不同的Jiffies,常用的監(jiān)控軟件就是利用/proc/stat里面的這些數(shù)據(jù)來(lái)計(jì)算CPU的利用率的。
33、60;包含了所有CPU活動(dòng)的信息,該文件中的所有值都是從系統(tǒng)啟動(dòng)開(kāi)始累計(jì)到當(dāng)前時(shí)刻。 /proc/stat/ workbuilder $ cat /proc/stat cpu 432661 13295 86656 422145968 171474 233 5346 cpu0 123075 2462 23494 105543694 16586 0 4615 cpu1 111917 4124 23858 105503820 69697 123 371 cpu2 103164 3554 21530 105521167 64032 106 3
34、34 cpu3 94504 3153 17772 105577285 21158 4 24 intr 1065711094 1057275779 92 0 6 6 0 4 0 3527 0 0 0 70 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東理工學(xué)院《街舞》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東科技學(xué)院《薪酬管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東江門(mén)幼兒師范高等專(zhuān)科學(xué)?!毒坝^設(shè)計(jì)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東機(jī)電職業(yè)技術(shù)學(xué)院《精確農(nóng)業(yè)概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東行政職業(yè)學(xué)院《移動(dòng)通信技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工業(yè)大學(xué)《特種材料連接》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工程職業(yè)技術(shù)學(xué)院《互聯(lián)網(wǎng)金融產(chǎn)品規(guī)劃與設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東第二師范學(xué)院《公司理財(cái)雙語(yǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東財(cái)貿(mào)職業(yè)學(xué)院《傳統(tǒng)造像(圓雕)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小班安全找媽媽課件
- 普外科醫(yī)療組長(zhǎng)競(jìng)聘演講
- 北京市朝陽(yáng)區(qū)2022-2023學(xué)年三年級(jí)上學(xué)期英語(yǔ)期末試卷
- GB/T 9755-2024合成樹(shù)脂乳液墻面涂料
- 嗶哩嗶哩MATES人群資產(chǎn)經(jīng)營(yíng)白皮書(shū)【嗶哩嗶哩】
- 【歷史】第一、二單元測(cè)試題2024~2025學(xué)年統(tǒng)編版七年級(jí)歷史上冊(cè)
- 婚姻家庭規(guī)劃
- 認(rèn)識(shí)實(shí)習(xí)報(bào)告(10篇)
- 【MOOC】?jī)?nèi)科護(hù)理學(xué)-中山大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2024年商業(yè)地產(chǎn)買(mǎi)賣(mài)合同樣本
- 家族族譜模板
- 家譜修編倡議書(shū)范文
評(píng)論
0/150
提交評(píng)論