Linux
為什麼swappiness不起作用?
我們有一台 RHEL 7 機器,只有 2G 可用 RAM:
free -g total used free shared buff/cache available Mem: 31 28 0 0 1 2 Swap: 15 9 5
vm.swappiness = 100
所以我們決定用in/etc/sysctl.conf
而不是 10將 swappiness 增加到最大值,並用於sysctl -p
應用設置。一段時間後,我們再次檢查了狀態:
free -g total used free shared buff/cache available Mem: 31 28 0 0 2 2 Swap: 15 9 5
正如我們所看到的,儘管有新的 swappiness 設置,但我們看到
free -g
可用 RAM 保持在 2G。為什麼?這裡有什麼問題?我們預計會看到 15G 的已用交換。
我們還檢查了:
cat /proc/sys/vm/swappiness 100
所以一切都應該根據新設置工作,但
free
顯示相同的情況。這是怎麼回事?
該
swappiness
設置按預期工作。增加swappiness
不會導致系統更喜歡交換而不是其他任何東西;增加swappiness
會影響頁面記憶體和交換之間的平衡。當核心需要使物理記憶體可用時,它可以丟棄通常使用以下兩種策略之一:它可以從頁面記憶體中丟棄頁面(因為它們的內容在磁碟上),或者它可以將頁面移動到交換;swappiness
決定了它在多大程度上支持一種策略而不是另一種策略。設置swappiness
為 0(最小值)意味著核心將避免交換,直到它達到各種高水位標記,並從頁面記憶體中逐出頁面;將其設置為 100(最大值)意味著核心將平等地考慮交換和逐出頁面記憶體。只有當核心需要更多記憶體時,您才會看到新設置有所不同:在記憶體中使用的記憶體量減少之前,您會看到使用的交換量增加。
您不能使用
swappiness
核心來保持更多可用記憶體。物理記憶體總是最好使用而不是空閒,因此核心沒有動力去搶先釋放物理記憶體(增加可用記憶體)。有關詳細資訊,請參閱RHEL 7 性能調整指南。