2013-11-03 18 views
2

通過從「/ proc/meminfo」獲取Memtotal和Memfree值並減去它們,我們必須在Linux中獲得已用內存。我訪問過的大部分線程和網頁已經引導了這種方法來計算Linux中的總內存使用量。但是通過實施這種方法,我得到了與GNOME系統監視器不同的結果!我的結果大於(大約兩倍)。那麼GNOME系統監視器使用什麼方法?在Linux中,確切的總內存使用量等於系統監視器

+2

GNOME是開源的。去看看他們是如何計算的! –

+1

不知道GNOME系統監視器,但寫了一些關於top,htop,free,ps [這裏](http://unix.stackexchange.com/a/65852/28489)和[here](http:// unix.stackexchange.com/a/58541/28489)可能會有所幫助... – Runium

+0

謝謝@Sukminder。我看到了你推薦的頁面。確切的內存使用公式是:used memory =(MemTotal-MemFree) - (Buffers + Cached); – user2949310

回答

1

GNOME system monitor使用libgtop來檢索各種平臺的內存信息。對於Linux它使用sysdeps/linux/mem.c2該處程序如下:

字符串像「MemTotal」/proc/meminfo標題。

…  
    buf->total = get_scaled(buffer, "MemTotal:"); 
    buf->free = get_scaled(buffer, "MemFree:"); 
    buf->used = buf->total - buf->free; 
    buf->shared = 0; 
    buf->buffer = get_scaled(buffer, "Buffers:"); 
    buf->cached = get_scaled(buffer, "Cached:"); 

    buf->user = buf->total - buf->free - buf->cached - buf->buffer; 

在申請報告的內存是buf->user。在src/load-graph.cpp1通過更準確:

mempercent = (float)mem.user/(float)mem.total; 
set_memory_label_and_picker(GTK_LABEL(graph->labels.memory), 
          GSM_COLOR_BUTTON(graph->mem_color_picker), 
          mem.user, mem.total, mempercent);