Rhel

為什麼即使 vm.swappiness = 1,RHEL 也使用交換?

  • March 27, 2019

RHEL 7.2 記憶體使用,每個free -m

             total        used        free      shared  buff/cache   available
Mem:         386564       77941       57186         687      251435      306557
Swap:         13383        2936       16381

我們看到使用的交換是 2936M

所以我們想通過以下方式將其減少到 min

echo 1 > /proc/sys/vm/swappiness

sysctl -w vm.swappiness=1

echo "vm.swappiness = 1" >> /etc/sysctl.conf

10分鐘後我們再次檢查,但作業系統仍然使用交換

free -m:

             total        used        free      shared  buff/cache   available
Mem:         386564       77941       57186         687      251435      306557
Swap:         13389        2930       16381

為什麼我們沒有採取的行動會立即產生影響?

我們是否需要重新啟動作業系統才能讓 swap 曾經是 0 ?

例子

我們執行vmstat

vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
3  0  85740 20255872 2238248 183126400    0    0     7   162    0    0  7  1 92  0  0

我們減少 vm.swappiness=1

並在 10 分鐘後執行 vmstat:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
3  0  85740 20255872 2238248 183126400    0    0     7   162    0    0  7  1 92  0  0

正如您之前被告知的(請參閱為什麼 swappiness 不起作用?),更改swappiness只會影響核心在需要釋放記憶體時做出的未來決策。減少它不會導致核心重新載入所有被換出的東西。

您的vmstat輸出顯示交換沒有被積極使用,您目前的工作負載確實不需要已換出的頁面。

嘗試以您傾向於做的方式對核心對交換的使用進行微觀管理是沒有意義的。根據您的工作負載,決定是否需要支持頁面記憶體,swappiness進行相應調整,然後讓系統繼續執行。

如果您真的想清除交換,請禁用它並重新啟用它:

swapoff -a && swapon -a

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