具有高虛擬大小但 RAM 和 GPU 記憶體使用率低的程序的缺點
我注意到我的一些程序在我的電腦中佔用了很多虛擬大小。我知道程序的虛擬大小是它實際使用的記憶體、它映射到自身的記憶體(例如 X 伺服器的影片卡 RAM)、已映射到它的磁碟上的文件的總和(最值得注意的是共享庫),以及與其他程序共享的記憶體。換句話說,虛擬大小表示程序目前能夠訪問多少記憶體。
我正在執行的程序佔用大量虛擬大小(~117 GB),但 RAM 很小:
和很少的GPU記憶體:
和低磁碟 I/O:
此類具有高虛擬大小(但 RAM 小、GPU 記憶體小和磁碟 I/O 低)的程序可能會產生任何潛在的不良影響嗎?他們能以某種方式減慢其他程序嗎?電腦有 32 GB 的 RAM。
一般來說,它可能不會產生不好的影響。但是,Linux 預設情況下允許過度使用記憶體。這意味著如果一個程序請求記憶體,Linux 會說“確定”。然後,如果它確實耗盡了記憶體(包括交換空間),Linux 將開始殺死程序以釋放記憶體。
因此,如果您的程序分配了 117GB 但沒有使用其中的大部分,它將顯示 117GB 虛擬記憶體。但是,如果您的程序突然決定它實際上將填滿 117GB,Linux 將耗盡記憶體並殺死它,並且可能還會殺死其他程序(這就是不良影響的來源)。
Linux 核心可以配置它允許的過量使用量。該連結中描述瞭如何執行此操作的過程,但我也會在此處進行描述,以便將所有內容保存在一個地方。
在 Linux 核心 ≥ 2.5.30 上,有兩個 proc 文件對此進行了規範。首先,有
/proc/sys/vm/overcommit_memory
. 這可以具有三個值:
0
:讓核心自己決定它允許多少過量使用1
: 允許無限過量使用2
: 允許根據/proc/sys/vm/overcommitment_ratio
.另一個 proc 文件 ,
/proc/sys/overcommitment_ratio
表示如果另一個設置為 ,它將允許的記憶體過度使用百分比2
。如果overcommit_memory
設置為2
,Linux 將允許送出所有交換空間,加上overcommitment_ratio
% 的 RAM。