cat /proc/meminfo

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:不穩定頁表的大小
VmallocTotal: 可以vmalloc虛擬內存大小

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

VmallocChunk: largest contigious block of vmalloc area which is free


VSS- Virtual Set Size 虛擬耗用內存(包含共享庫佔用的內存)
RSS- Resident Set Size 實際使用物理內存(包含共享庫佔用的內存)
PSS- Proportional Set Size 實際使用的物理內存(比例分配共享庫佔用的內存)
USS- Unique Set Size 進程獨自佔用的物理內存(不包含共享庫佔用的內存)
一般來說內存佔用大小有如下規律:VSS >= RSS >= PSS >= USS


下面簡單來個例子,看看已用內存和物理內存大小..
#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
發佈了72 篇原創文章 · 獲贊 13 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章