我的虛擬機器中的所有記憶體都被什麼佔用了?這不是磁碟緩存

我的虛擬機器中的所有記憶體都被什麼佔用了?這不是磁碟緩存

我有一個問題,當我嘗試建立一個非常大的專案時,即使有足夠的記憶體(實際上是 14 GB),我的機器也會開始交換(幾 GB)。當我運行時free,它顯示它不是磁碟快取:

$ free -m
             total       used       free     shared    buffers     cached
Mem:         12900       6350       6549          0          7         77
-/+ buffers/cache:       6266       6633
Swap:         9211        233       8978

因此,實際使用了 6.3 GB 內存,但如果我查看頂部(按內存使用百分比排序),就會發現沒有任何內存在使用:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                               
38669 blong     20   0 1282m 378m  42m S    2  2.9   0:50.79 firefox                                               
 1327 root      20   0  365m 126m 4056 S    4  1.0  40:23.94 Xorg                                                  
 2540 blong     20   0 1578m  67m  10m S    2  0.5  21:33.35 gnome-shell                                           
13943 blong     20   0  579m  12m 5604 S    2  0.1   1:07.01 gnome-terminal                                        
30093 blong     20   0  540m 8664 5572 S    0  0.1   0:03.96 icemon                                                
 2558 blong     20   0  362m 5964 1808 S    0  0.0   5:17.44 vmtoolsd                                              
 2526 blong     20   0  672m 5056 2000 S    0  0.0   0:26.81 gnome-settings-                                       
 2546 blong     20   0  354m 3484 2244 S    0  0.0   5:08.96 pulseaudio

我錯過了什麼嗎?

重新啟動虛擬機器可以解決此問題,但我更願意弄清楚實際發生了什麼。

答案1

互換並不是壞事。在這種情況下,這可能是件好事。有一個核心參數 ( vm.swappiness) 控制核心交換不活動記憶體頁的趨勢。這樣做是為了讓 RAM 可以更好地用於檔案系統快取等任務。

雖然我通常不鼓勵在不知道發生了什麼的情況下調整內核參數,但您可以通過添加vm.swappiness = 0/etc/sysctl.conf執行sysctl -p.


至於什麼在使用你的記憶,這不是一個簡單的答案。除了應用程式私有記憶體和快取之外,還有很多東西會使用系統記憶體。還有其他東西,例如共享記憶體、映射記憶體和核心板。

您可以透過查看獲得有關係統記憶體使用情況的大量資訊/proc/meminfo。但這不適合膽小的人。 Linux 的VM 系統極為複雜。

相關內容