<em id="pn7p8"><acronym id="pn7p8"><u id="pn7p8"></u></acronym></em>

    <th id="pn7p8"></th>

    <button id="pn7p8"></button>

      <dd id="pn7p8"></dd>
      <progress id="pn7p8"><track id="pn7p8"></track></progress>

      Linux培訓
      達內IT學院

      400-111-8989

      Linux下如何獲取cpu的利用率?

      • 發布:Linux培訓
      • 來源:Linux培訓常見問題匯總
      • 時間:2017-08-25 17:17

      "proc文件系統是一個偽文件系統,它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。用戶和應用程序可以通過proc得到系統的信息,并可以改變內核的某些參數。"

      這里將介紹如何從/proc文件系統中獲取與防火墻相關的一些性能參數,以及如何通過/proc文件系統修改內核的相關配置。

      1、從/proc文件系統獲取相關的性能參數

      cpu使用率: /proc/stat

      內存使用情況: /proc/meminfo

      網絡負載信息: /proc/net/dev

      相應的計算方法:(摘自:什么是proc文件系統,見參考資料)

      (1) 處理器使用率

      (2) 內存使用率

      (3) 流入流出數據包

      (4) 整體網絡負載

      這些數據分別要從/proc/stat、/proc/net/dev、/proc/meminfo三個文件中提取。如里有問題或對要提取的數據不太清楚,可以使用man proc來查看proc文件系統的聯機手冊。

      (1) 處理器使用率

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

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

      (2) 內存使用率

      這里需要從/proc/meminfo文件中提取兩個數據,當前內存的使用量(cmem)以及內存總量(amem)。

      內存使用百分比 = 100 * (cmem / umem)

      (3)網絡利用率

      為了得到網絡利用率的相關數據,需要從/proc/net/dev文件中獲得兩個數據:從本機輸出的數據包數,流入本機的數據包數。它們都位于這個文件的第四行。

      性能收集程序開始記錄下這兩個數據的初始值,以后每次獲得這個值后均減去這個初始值即為從集群啟動開始從本節點通過的數據包。

      利用上述數據計算出網絡的平均負載,方法如下:

      平均網絡負載 = (輸出的數據包+流入的數據包) / 2

      2. 通過/proc文件系統調整相關的內核配置

      允許ip轉發 /proc/sys/net/ipv4/ip_forward

      禁止ping /proc/sys/net/ipv4/icmp_echo_ignore_all

      可以在命令行下直接往上述兩個“文件”里頭寫入"1"來實現相關配置,如果寫入"0"將取消相關配置。不過在系統重啟以后,這些配置將恢復默認設置,所以,如果想讓這些修改生效,可以把下面的配置直接寫入/etc/profile文件,或者其他隨系統啟動而執行的程序文件中。

      echo 1 > /proc/sys/net/ipv4/ip_forward

      echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

      這里計算cpu使用率是有問題的,需要使用上一狀態的值來計算

      正確的計算方法是,等上一個時間:

      1、記錄某個時刻cpu的使用情況

      2、等上一個時間段

      3、再記錄此刻的cpu使用情況

      4、計算總的時間片

      把第一次的所有cpu使用情況求和,得到j1

      把第二次的所有cpu使用情況求和,得到j2

      j2-j1得到這個時間段的所有時間片

      即total=j2-j1=第二次的所有列的和-第一次的所有列的和

      5、計算idle時間

      idle對應第五列的數據,用第二次的減去第一次的即可

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

      6、計算cpu使用率

      rate=(total-idle)/total

      在Linux/Unix下,CPU利用率分為用戶態 ,系統態 和空閑態 ,分別表示CPU處于用戶態執行的時間,系統內核執行的時間,和空閑系統進程執行的時間。平時所說的CPU利用率是指:CPU執行非系統空閑進程的時間 / CPU總的執行時間 。

      linux c程序獲取cpu使用率及內存使用情況

      2009-05-17 23:10

      想獲取一下目標機運行時linux系統的硬件占用情況,寫了這幾個小程序,以后直接用了。

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

      看程序 :

      /***************************************************************

      * @file: statusinfo.c

      *

      * @brief: 從linux系統獲取cpu及內存使用情況

      *

      * @version 1.0

      *

      ***************************************************************/

      typedef struct PACKED //定義一個cpu occupy的結構體

      {

      char name[20]; //定義一個char類型的數組名name有20個元素

      unsigned int user; //定義一個無符號的int類型的user

      unsigned int nice; //定義一個無符號的int類型的nice

      unsigned int system;//定義一個無符號的int類型的system

      unsigned int idle; //定義一個無符號的int類型的idle

      }CPU_OCCUPY;

      typedef struct PACKED //定義一個mem occupy的結構體

      {

      char name[20]; //定義一個char類型的數組名name有20個元素

      unsigned long total;

      char name2[20];

      unsigned long free;

      }MEM_OCCUPY;

      get_memoccupy (MEM_OCCUPY *mem) //對無類型get函數含有一個形參結構體類弄的指針O

      {

      FILE *fd;

      int n;

      char buff[256];

      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 (buff, "%s %u", m->name2, &m->free, m->name2);

      fclose(fd); //關閉文件fd

      }

      int cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n)

      {

      unsigned long od, nd;

      unsigned long id, sd;

      int cpu_use = 0;

      od = (unsigned long) (o->user + o->nice + o->system +o->idle);//第一次(用戶+優先級+系統+空閑)的時間再賦給od

      nd = (unsigned long) (n->user + n->nice + n->system +n->idle);//第二次(用戶+優先級+系統+空閑)的時間再賦給od

      id = (unsigned long) (n->user - o->user); //用戶第一次和第二次的時間之差再賦給id

      sd = (unsigned long) (n->system - o->system);//系統第一次和第二次的時間之差再賦給sd

      if((nd-od) != 0)

      cpu_use = (int)((sd+id)*10000)/(nd-od); //((用戶+系統)乖100)除(第一次和第二次的時間差)再賦給g_cpu_used

      else cpu_use = 0;

      //printf("cpu: %u/n",cpu_use);

      return cpu_use;

      }

      get_cpuoccupy (CPU_OCCUPY *cpust) //對無類型get函數含有一個形參結構體類弄的指針O

      {

      FILE *fd;

      int n;

      char buff[256];

      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);

      }

      int main()

      {

      CPU_OCCUPY cpu_stat1;

      CPU_OCCUPY cpu_stat2;

      MEM_OCCUPY mem_stat;

      int cpu;

      //獲取內存

      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);

      return 0;

      }

      預約申請免費試聽課

      填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

      上一篇:如何看待Linux操作系統的用戶空間和內核空間?
      下一篇:掌握Linux系統 找到好工作會是難事嗎?
      • 掃碼領取資料

        回復關鍵字:視頻資料

        免費領取 達內課程視頻學習資料

      • 視頻學習QQ群

        添加QQ群:1143617948

        免費領取達內課程視頻學習資料

      Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

      選擇城市和中心
      黑龍江省

      吉林省

      河北省

      湖南省

      貴州省

      云南省

      廣西省

      海南省

      高清特黄a大片,日本真人真做爰,特级做人爱C级,免费a级毛片 百度 好搜 搜狗
      <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>