/proc/meminfo詳解


原文路徑:http://blog.sina.com.cn/s/blog_7106477c0100qj9d.html

cat /proc/meminfo   讀出的內核信息進行解釋,

下篇文章會簡單對讀出該信息的代碼進行簡單的分析。

 

MemTotal:       507480 kB

 

MemFree:         10800 kB

Buffers:         34728 kB

Cached:          98852 kB

SwapCached:        128 kB

Active:         304248 kB

Inactive:        46192 kB

HighTotal:           0 kB

HighFree:            0 kB

LowTotal:       507480 kB

LowFree:         10800 kB

SwapTotal:      979956 kB

SwapFree:       941296 kB

Dirty:              32 kB

Writeback:           0 kB

AnonPages:      216756 kB

Mapped:          77560 kB

Slab:            22952 kB

SReclaimable:    15512 kB

SUnreclaim:       7440 kB

PageTables:       2640 kB

NFS_Unstable:        0 kB

Bounce:              0 kB

CommitLimit:   1233696 kB

Committed_AS:   828508 kB

VmallocTotal:   516088 kB

VmallocUsed:      5032 kB

VmallocChunk:   510580 kB

 

相應選項中文意思想各位高手已經知道,如何翻譯有什么錯誤,請務必指出:

    MemTotal: 所有可用RAM大小 (即物理內存減去一些預留位和內核的二進制代碼大小)

     MemFree: LowFree與HighFree的總和,被系統留着未使用的內存

     Buffers: 用來給文件做緩沖大小

      Cached: 被高速緩沖存儲器(cache memory)用的內存的大小(等於 diskcache minus SwapCache ).

  SwapCached:被高速緩沖存儲器(cache memory)用的交換空間的大小

             已經被交換出來的內存,但仍然被存放在swapfile中。用來在需要的時候很快的被替換而不需要再次打開I/O端口。

      Active: 在活躍使用中的緩沖或高速緩沖存儲器頁面文件的大小,除非非常必要否則不會被移作他用.

    Inactive: 在不經常使用中的緩沖或高速緩沖存儲器頁面文件的大小,可能被用於其他途徑.

   HighTotal:

    HighFree: 該區域不是直接映射到內核空間。內核必須使用不同的手法使用該段內存。

    LowTotal:

     LowFree: 低位可以達到高位內存一樣的作用,而且它還能夠被內核用來記錄一些自己的數據結構。Among many

              other things, it is where everything from the Slab is

              allocated.  Bad things happen when you're out of lowmem.

         

   SwapTotal: 交換空間的總大小

    SwapFree: 未被使用交換空間的大小

    Dirty: 等待被寫回到磁盤的內存大小。

     

   Writeback: 正在被寫回到磁盤的內存大小。

  

   AnonPages:未映射頁的內存大小

  

   Mapped: 設備和文件等映射的大小。

  

   Slab: 內核數據結構緩存的大小,可以減少申請和釋放內存帶來的消耗。

   SReclaimable:可收回Slab的大小

  

   SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)

  

   PageTables:管理內存分頁頁面的索引表的大小。

  

   NFS_Unstable:不穩定頁表的大小

  

   Bounce:

 CommitLimit: Based on the overcommit ratio ('vm.overcommit_ratio'),

              this is the total amount of  memory currently available to

              be allocated on the system. This limit is only adhered to

              if strict overcommit accounting is enabled (mode 2 in

              'vm.overcommit_memory').

              The CommitLimit is calculated with the following formula:

              CommitLimit = ('vm.overcommit_ratio' * Physical RAM) + Swap

              For example, on a system with 1G of physical RAM and 7G

              of swap with a `vm.overcommit_ratio` of 30 it would

              yield a CommitLimit of 7.3G.

              For more details, see the memory overcommit documentation

              in vm/overcommit-accounting.

             

Committed_AS: The amount of memory presently allocated on the system.

              The committed memory is a sum of all of the memory which

              has been allocated by processes, even if it has not been

              "used" by them as of yet. A process which malloc()'s 1G

              of memory, but only touches 300M of it will only show up

              as using 300M of memory even if it has the address space

              allocated for the entire 1G. This 1G is memory which has

              been "committed" to by the VM and can be used at any time

              by the allocating application. With strict overcommit

              enabled on the system (mode 2 in 'vm.overcommit_memory'),

              allocations which would exceed the CommitLimit (detailed

              above) will not be permitted. This is useful if one needs

              to guarantee that processes will not fail due to lack of

              memory once that memory has been successfully allocated.

VmallocTotal: 可以vmalloc虛擬內存大小

VmallocUsed: 已經被使用的虛擬內存大小。

VmallocChunk: largest contigious block of vmalloc area which is free

 

 

 

下面簡單來個例子,看看已用內存和物理內存大小..

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int MemInfo(char* Info, int len);

int main()

{

  char buf[128];

  memset(buf, 0, 128);

  MemInfo(buf, 100);

  printf("%s", buf);

  return 0;

}

int MemInfo(char* Info, int len)

{

  char sStatBuf[256];

  FILE* fp;

  int flag;

  int TotalMem;

  int UsedMem;

  char* line;

  if(system("free -m | awk '{print $2,$3}' > mem"));

  memset(sStatBuf, 0, 256);

  fp = fopen("mem", "rb");

  if(fp < 0)

  {

    return -1;

   }

  fread(sStatBuf,1, sizeof(sStatBuf) , fp);

 

  line = strstr(sStatBuf, "\n");

  TotalMem = atoi(line);

  line = strstr(line, " ");

  UsedMem = atoi(line);

  memset(sStatBuf, 0, 256);

  sprintf(sStatBuf, "Used %dM/Total %dM\n", UsedMem, TotalMem);

  if(strlen(sStatBuf) > len)

   {

     return -1;

   }

   memcpy(Info, sStatBuf, strlen(sStatBuf));

   return 0;

}

結果:Used 488M/Total 495M


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM