自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux下如何獲取cpu的利用率

系統(tǒng) Linux
本文將介紹如何從/proc文件系統(tǒng)中獲取與防火墻相關(guān)的一些性能參數(shù),以及如何通過/proc文件系統(tǒng)修改內(nèi)核的相關(guān)配置。

[[201252]]

"proc文件系統(tǒng)是一個(gè)偽文件系統(tǒng),它只存在內(nèi)存當(dāng)中,而不占用外存空間。它以文件系統(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)的計(jì)算方法:(摘自:什么是proc文件系統(tǒng),見參考資料)

(1) 處理器使用率

(2) 內(nèi)存使用率

(3) 流入流出數(shù)據(jù)包

(4) 整體網(wǎng)絡(luò)負(fù)載

這些數(shù)據(jù)分別要從/proc/stat、/proc/net/dev、/proc/meminfo三個(gè)文件中提取。如里有問題或?qū)σ崛〉臄?shù)據(jù)不太清楚,可以使用man proc來查看proc文件系統(tǒng)的聯(lián)機(jī)手冊(cè)。

(1) 處理器使用率

這里要從/proc/stat中提取四個(gè)數(shù)據(jù):用戶模式(user)、低優(yōu)先級(jí)的用戶模式(nice)、內(nèi)核模式(system)以及空閑的處理器時(shí)間(idle)。它們均位于/proc/stat文件的***行。CPU的利用率使用如下公式來計(jì)算。

CPU利用率 = 100 *(user + nice + system)/(user + nice + system + idle)

(2) 內(nèi)存使用率

這里需要從/proc/meminfo文件中提取兩個(gè)數(shù)據(jù),當(dāng)前內(nèi)存的使用量(cmem)以及內(nèi)存總量(amem)。

內(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è)文件的第四行。

性能收集程序開始記錄下這兩個(gè)數(shù)據(jù)的初始值,以后每次獲得這個(gè)值后均減去這個(gè)初始值即為從集群?jiǎn)?dòng)開始從本節(jié)點(diǎn)通過的數(shù)據(jù)包。

利用上述數(shù)據(jù)計(jì)算出網(wǎng)絡(luò)的平均負(fù)載,方法如下:

平均網(wǎng)絡(luò)負(fù)載 = (輸出的數(shù)據(jù)包+流入的數(shù)據(jù)包) / 2

2. 通過/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è)“文件”里頭寫入"1"來實(shí)現(xiàn)相關(guān)配置,如果寫入"0"將取消相關(guān)配置。不過在系統(tǒng)重啟以后,這些配置將恢復(fù)默認(rèn)設(shè)置,所以,如果想讓這些修改生效,可以把下面的配置直接寫入/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

這里計(jì)算cpu使用率是有問題的,需要使用上一狀態(tài)的值來計(jì)算

正確的計(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ù),用第二次的減去***次的即可

idle=第二次的第五列-***次的第五列

6、計(jì)算cpu使用率

rate=(total-idle)/total

在Linux/Unix下,CPU利用率分為用戶態(tài) ,系統(tǒng)態(tài) 和空閑態(tài) ,分別表示CPU處于用戶態(tài)執(zhí)行的時(shí)間,系統(tǒng)內(nèi)核執(zhí)行的時(shí)間,和空閑系統(tǒng)進(jìn)程執(zhí)行的時(shí)間。平時(shí)所說的CPU利用率是指:CPU執(zhí)行非系統(tǒng)空閑進(jìn)程的時(shí)間 / CPU總的執(zhí)行時(shí)間 。

linux c程序獲取cpu使用率及內(nèi)存使用情況

2009-05-17 23:10

想獲取一下目標(biāo)機(jī)運(yùn)行時(shí)linux系統(tǒng)的硬件占用情況,寫了這幾個(gè)小程序,以后直接用了。

方法就是讀取proc下的文件來獲取了。 cpu使用率: /proc/stat ,內(nèi)存使用情況: /proc/meminfo

看程序 :

  1. /*************************************************************** 
  2.  *    @file:        statusinfo.c 
  3.  * 
  4.  *    @brief:        從linux系統(tǒng)獲取cpu及內(nèi)存使用情況 
  5.  *    @version    1.0 
  6.  * 
  7.  ***************************************************************/ 
  8.  typedef struct PACKED         //定義一個(gè)cpu occupy的結(jié)構(gòu)體 
  9. char name[20];      //定義一個(gè)char類型的數(shù)組名name有20個(gè)元素 
  10. unsigned int user; //定義一個(gè)無(wú)符號(hào)的int類型的user 
  11.  unsigned int nice; //定義一個(gè)無(wú)符號(hào)的int類型的nice 
  12.  unsigned int system;//定義一個(gè)無(wú)符號(hào)的int類型的system 
  13.  unsigned int idle; //定義一個(gè)無(wú)符號(hào)的int類型的idle 
  14.  }CPU_OCCUPY; 
  15.  
  16.  typedef struct PACKED         //定義一個(gè)mem occupy的結(jié)構(gòu)體 
  17. char name[20];      //定義一個(gè)char類型的數(shù)組名name有20個(gè)元素 
  18. unsigned long total;  
  19.  char name2[20]; 
  20.  unsigned long free;                        
  21.  }MEM_OCCUPY; 
  22.  
  23.  get_memoccupy (MEM_OCCUPY *mem) //對(duì)無(wú)類型get函數(shù)含有一個(gè)形參結(jié)構(gòu)體類弄的指針O 
  24.  { 
  25.      FILE *fd;           
  26.      int n;              
  27.      char buff[256];    
  28.      MEM_OCCUPY *m; 
  29.      m=mem; 
  30.                                                                                                                 
  31.      fd = fopen ("/proc/meminfo""r");  
  32.         
  33.      fgets (buff, sizeof(buff), fd);  
  34.      fgets (buff, sizeof(buff), fd);  
  35.      fgets (buff, sizeof(buff), fd);  
  36.      fgets (buff, sizeof(buff), fd);  
  37.      sscanf (buff, "%s %u %s", m->name, &m->total, m->name2);  
  38.       
  39.      fgets (buff, sizeof(buff), fd); //從fd文件中讀取長(zhǎng)度為buff的字符串再存到起始地址為buff這個(gè)空間里  
  40.      sscanf (buff, "%s %u", m->name2, &m->free, m->name2);  
  41.       
  42.      fclose(fd);     //關(guān)閉文件fd 
  43.  } 
  44.  
  45.  int cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n)  
  46.  {    
  47.      unsigned long od, nd;     
  48.      unsigned long id, sd; 
  49.      int cpu_use = 0;    
  50.       
  51.      od = (unsigned long) (o->user + o->nice + o->system +o->idle);//***次(用戶+優(yōu)先級(jí)+系統(tǒng)+空閑)的時(shí)間再賦給od 
  52.      nd = (unsigned long) (n->user + n->nice + n->system +n->idle);//第二次(用戶+優(yōu)先級(jí)+系統(tǒng)+空閑)的時(shí)間再賦給od 
  53.         
  54.      id = (unsigned long) (n->user - o->user);    //用戶***次和第二次的時(shí)間之差再賦給id 
  55.      sd = (unsigned long) (n->system - o->system);//系統(tǒng)***次和第二次的時(shí)間之差再賦給sd 
  56.      if((nd-od) != 0) 
  57.      cpu_use = (int)((sd+id)*10000)/(nd-od); //((用戶+系統(tǒng))乖100)除(***次和第二次的時(shí)間差)再賦給g_cpu_used 
  58.      else cpu_use = 0; 
  59.      //printf("cpu: %u/n",cpu_use); 
  60.      return cpu_use; 
  61.  } 
  62.  
  63.  get_cpuoccupy (CPU_OCCUPY *cpust) //對(duì)無(wú)類型get函數(shù)含有一個(gè)形參結(jié)構(gòu)體類弄的指針O 
  64.  {    
  65.      FILE *fd;          
  66.      int n;             
  67.      char buff[256];  
  68.      CPU_OCCUPY *cpu_occupy; 
  69.      cpu_occupy=cpust; 
  70.                                                                                                                  
  71.      fd = fopen ("/proc/stat""r");  
  72.      fgets (buff, sizeof(buff), fd); 
  73.       
  74.      sscanf (buff, "%s %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle); 
  75.       
  76.      fclose(fd);      
  77.  } 
  78.  
  79.  int main() 
  80.  { 
  81.      CPU_OCCUPY cpu_stat1; 
  82.      CPU_OCCUPY cpu_stat2; 
  83.      MEM_OCCUPY mem_stat; 
  84.      int cpu; 
  85.       
  86.      //獲取內(nèi)存 
  87.     get_memoccupy ((MEM_OCCUPY *)&mem_stat); 
  88.       
  89.      //***次獲取cpu使用情況 
  90.     get_cpuoccupy((CPU_OCCUPY *)&cpu_stat1); 
  91.      sleep(10); 
  92.       
  93.      //第二次獲取cpu使用情況 
  94.     get_cpuoccupy((CPU_OCCUPY *)&cpu_stat2); 
  95.       
  96.      //計(jì)算cpu使用率 
  97.     cpu = cal_cpuoccupy ((CPU_OCCUPY *)&cpu_stat1, (CPU_OCCUPY *)&cpu_stat2); 
  98.       
  99.      return 0; 
  100.  } 

 

責(zé)任編輯:龐桂玉 來源: 嵌入式Linux中文站
相關(guān)推薦

2023-04-04 09:22:50

LinuxCPU命令

2010-03-11 16:49:55

Linux CPU利用

2024-10-14 13:01:33

AOTcpu符號(hào)

2013-01-04 10:44:31

IBMdW

2019-03-05 15:53:40

Linux服務(wù)器CPU

2019-08-28 06:58:06

Linux監(jiān)控腳本Shell

2024-06-26 09:29:53

2011-03-17 15:16:38

2014-04-09 16:52:24

NetHogs網(wǎng)絡(luò)帶寬開源監(jiān)控

2012-10-11 10:21:33

數(shù)據(jù)中心CPU利用率服務(wù)器效率

2010-03-15 15:01:37

2019-01-23 10:21:32

吞吐量響應(yīng)時(shí)間CPU

2011-03-17 13:54:42

查詢參數(shù)SQL語(yǔ)句利用率

2021-02-03 09:26:49

數(shù)據(jù)中心基礎(chǔ)設(shè)施能源

2015-09-07 11:54:25

云計(jì)算數(shù)據(jù)中心資源利用

2013-03-19 12:23:25

SDN網(wǎng)絡(luò)利用率網(wǎng)絡(luò)系統(tǒng)架構(gòu)

2019-03-07 09:25:59

LinuxCPU交換分區(qū)

2012-11-07 15:07:30

VMware虛擬化

2011-04-12 09:07:47

磁盤空間利用率虛擬化的隱藏成本

2013-04-02 09:15:40

服務(wù)器虛擬化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)