Linux

64GB 伺服器上的 100GB 虛擬記憶體,無交換

  • November 19, 2012

可能重複:

了解虛擬記憶體使用 > Linux 上的交換 + 物理

我們有以下流程:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                         
10684 root       8 -15 89.6g  13g 1.1g S 406.9 21.8 316:34.89 java 

假設我們只有 64GB 的 RAM,那麼這個虛擬記憶體量是否合適。這裡還有關於物理記憶體的資訊:

Mem:  65995412k total, 64967388k used,  1028024k free,  3976288k buffers
Swap: 32764556k total,     1236k used, 32763320k free, 19534812k cached

如您所見,僅交換了 1236k。

我們想知道缺少的 30GB+ 記憶體在哪裡?它們在磁碟上嗎?

特定程序可以使用多少虛擬記憶體?虛擬記憶體和RAM之間有什麼聯繫。

VIRT反映了程序分配的虛擬記憶體量,而不是真實的。程序的地址空間可能包含映射到不在 RAM 中的相應文件的某些區域。

至少程序可執行庫和共享庫映射到程序的虛擬地址空間。在程序執行期間,程序可能會將其他文件映射到它的地址空間,有時它的大小可能很大(圖像、電影、數據庫) - 甚至大於可用的 RAM 量 - 它受到目前可定址記憶體總量的限制處理器架構。

Linux 也使用樂觀記憶體分配策略。這意味著即使程序呼叫malloc()物理記憶體分配也可能會延遲到頁面將被使用。這意味著該程序可能會分配比可用更多的 RAM。

Linux 也可以在記憶體中稀疏相同的頁面。如果兩個程序在記憶體中使用相同的頁面,核心可以將兩個虛擬頁面映射到一個真實頁面(並釋放第二個頁面)。

所以,是的,當程序分配的虛擬記憶體多於可用物理記憶體的數量時,這是正常的。

引用自:https://serverfault.com/questions/450163