Linux
64GB 伺服器上的 100GB 虛擬記憶體,無交換
可能重複:
我們有以下流程:
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 也可以在記憶體中稀疏相同的頁面。如果兩個程序在記憶體中使用相同的頁面,核心可以將兩個虛擬頁面映射到一個真實頁面(並釋放第二個頁面)。
所以,是的,當程序分配的虛擬記憶體多於可用物理記憶體的數量時,這是正常的。