Linux

為什麼swappiness不起作用?

  • November 26, 2021

我們有一台 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 性能調整指南

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