Rhel

儘管配置為swappiness = 1,但swap很高

  • May 19, 2020

我們有月球伺服器 - 版本rhel 7.5

在此伺服器上消耗交換的行為很奇怪

我們將其配置/proc/sys/vm/swappiness為 1 並重新啟動伺服器

但是我們可以看到伺服器正在吃15G,而可用的時候是44G!

怎麼可能??

[root@moon01 network-scripts]# more /proc/sys/vm/swappiness
1
[root@moon01 network-scripts]# free -g
             total        used        free      shared  buff/cache   available
Mem:            125          80          38           0           6          44
Swap:            15          15           0

據我了解,只有當可用的時間接近最後幾個千兆記憶體時,交換才會增加

但情況並非如此

即使在swappiness=1Linux 上,如果可用,也會繼續使用交換。您的使用者空間程序不需要耗盡可用 RAM 來讓核心開始交換。我第一次發現這一點是因為我在 Ubuntu Linux 桌面上遇到了問題

在對我的問題的回答和評論中,有人指出磁碟記憶體是可能的原因。記憶體中的“空閒”空間很少是空的。核心會悄悄地將它用於記憶體,包括磁碟記憶體,知道它可以在應用程序需要更多記憶體時放棄記憶體是安全的。

我正在核心塢站中尋找參考。但是有一個很好的描述大多數程序將擁有大量記憶體(包括程式碼)的方式,這些記憶體僅在啟動期間使用,然後再也不會使用。因此,特別是在伺服器上,您將有很多“垃圾”存放在記憶體中,從磁碟記憶體等有用的東西中竊取空間。Linux 知道這一點,並且會選擇交換垃圾而不是放棄磁碟記憶體中的頁面。總的來說,這會逐漸增加交換使用量並緩慢增加記憶體的大小。即使“空閒”記憶體仍然相對較高,它也會這樣做。

簡而言之,這是預期的行為,沒有簡單的方法可以將其關閉。

引用自:https://unix.stackexchange.com/questions/587187