
我有一個問題,當我嘗試建立一個非常大的專案時,即使有足夠的記憶體(實際上是 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 系統極為複雜。