Linux SWAP 的設定建議值,在最早的書籍、文件教學都是建議設定為記憶體(RAM)的兩倍~
不過隨著記憶體越來越大,反而就建議 SWAP 的設定值就不要太大,畢竟吃到 SWAP 整台 機器的 IO 都會重不少~
原本想法應該是,記憶體使用滿,系統才會去使用到 SWAP,不過,仔細看看常常都是記憶體還很多,卻已經開始吃 SWAP,到底是怎麼回事呢?
Linux 設定 vm.swappiness 調整 swap 使用時機
Linux 的 sysctl 有個系統參數可以設定,記憶體使用多少 % 後,就會先開始使用 Swap
- vm.swappiness 預設值是:60
- sudo sysctl vm.swappiness # or $ cat /proc/sys/vm/swappiness
- vm.swappiness = 60
- 這代表的意義是,RAM 使用到 40% (100 - 60 = 40)以上就會開始吃 Swap
- sudo sysctl vm.swappiness # or $ cat /proc/sys/vm/swappiness
想要盡量優先使用記憶體,用完才去吃到 Swap,可將這個值盡量設小,設定成 1 都可以~
- sudo vim /etc/sysctl.conf
- 於檔案最後加入此行 vm.swappiness = 10
- sudo sysctl -p # 即完成
- sudo sysctl vm.swappiness # 驗證確認
- vm.swappiness = 10
另外作法
- 若只是想暫時生效:sysctl vm.swappiness=10
- 註:另一招乾脆 swapoff -a 把 swap 關了
相關網頁
- mm: avoid swapping out with swappiness==0 - ti-linux-kernel/ti-linux-kernel
- swappiness · Linux 文檔
- Swappiness in Linux | Baeldung on Linux
- Linux 下設置 swappiness 參數來配置內存使用到多少才開始使用swap
- linux 調整 swap 參數 | 阿輝的零碎筆記 - 點部落
- vfs_cache_pressure 可以控制系統清除cache的頻率
- 預設值為100,數值越高清除重建的頻率會增加
- 可以設定 500、10000 皆可,但是建議不要設定太高
- 系統調整,儘量不使用swap
- echo 3 > /proc/sys/vm/drop_caches
- swapoff -a
- swapon -a
- Limit memory and number of cores for docker runners (#1582)
- Running GitLab in a memory-constrained environment | GitLab
swapness 調整為 1 還是會使用到 swap,只是 page in / out 頻率比較沒有那麼頻繁。
這篇文章的說明,swap 並不是作為記憶體的替代品使用,而是將系統將不常使用的記憶體區塊轉移到 swap,讓需要的可以使用,進而提高運作效率: https://farseerfc.me/in-defence-of-swap.html
嗯嗯,懂,主要是因為現在記憶體都很大,每次看到 swap 在吃造成 IO重,但是看到 RAM 都還很空,就覺得這樣子不太對~
於是希望先盡量使用記憶體,真的快用完再去吃 SWAP,來看看這樣子機器會不會比較穩定點~ 🙂