Rhel
儘管配置為swappiness = 1,但swap很高
我們有月球伺服器 - 版本
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=1
Linux 上,如果可用,也會繼續使用交換。您的使用者空間程序不需要耗盡可用 RAM 來讓核心開始交換。我第一次發現這一點是因為我在 Ubuntu Linux 桌面上遇到了問題。在對我的問題的回答和評論中,有人指出磁碟記憶體是可能的原因。記憶體中的“空閒”空間很少是空的。核心會悄悄地將它用於記憶體,包括磁碟記憶體,知道它可以在應用程序需要更多記憶體時放棄記憶體是安全的。
我正在核心塢站中尋找參考。但是有一個很好的描述大多數程序將擁有大量記憶體(包括程式碼)的方式,這些記憶體僅在啟動期間使用,然後再也不會使用。因此,特別是在伺服器上,您將有很多“垃圾”存放在記憶體中,從磁碟記憶體等有用的東西中竊取空間。Linux 知道這一點,並且會選擇交換垃圾而不是放棄磁碟記憶體中的頁面。總的來說,這會逐漸增加交換使用量並緩慢增加記憶體的大小。即使“空閒”記憶體仍然相對較高,它也會這樣做。
簡而言之,這是預期的行為,沒有簡單的方法可以將其關閉。