vm.swappinessの設定は本当に10でいいのだろうか

注意: この記事には特に数値やコードを提示したうえでの考察などは無いです。

Linuxにはディスクスワップのしやすさを調整する vm.swappiness というパラメータが有ります。
よく知られた設定としては以下のような物が有るかと思います。

vm.swappiness = 0 : かつて(Kernel 3.5 より前、RHELだとKernel 2.6.32-303 より前)はこれがスワップを極力させない設定だった。今これを使うとスワップが無効化されOOMが出まくるというような話を聞く。
vm.swappiness = 1 : 今の時代におけるvm.swappinessの最低値。
vm.swappiness = 10 : 一般(どこの?)に言われる現実的な下限値。RedHatの出しているOracle DataBase運用時の推奨値も10。
vm.swappiness = 60 : デフォルト値。

しかしまぁ極力スワップはするべきではないかと言われると、それもクライアントOSで言えば Windows 98~2000 位の頃の常識のようにも感じますし、サーバーという(一般的には)ピーク性能よりも安定稼働を目指す環境のうえではギリギリになってスワップを始めるよりはある程度事前にスワップを始めた方が安全のような気がします。カーネルのソースコードを読んだわけでもない完全な感覚値ですが、以下のような感じの方がいいのかもしれません。

実メモリ1GB以下: vm.swappiness = 40 くらい
実メモリ2GB以下: vm.swappiness = 30 くらい
実メモリ4GB以下: vm.swappiness = 20 くらい
実メモリが4GBより多い: vm.swappiness = 10 を使う

HDDならともかく、サーバーのストレージも(特にクラウドでは)SSDが普通という時代になり、以前よりも「極力スワップするべきではない!」という感じでもないかと思います。この辺アクセス数であったりどのようなシステム構成であるかであったりどのようなソフトウェアを動かしているかで全然変わってくる話ですが、全然変わってくる話ゆえに vm.swappiness = 1~10 以外の設定例を見かけないので、この辺誰か詳しい人に考察してほしいなぁという所。

5.5. 仮想メモリのチューニング – Red Hat Customer Portal
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-memory-tunables

Linuxのswappinessは本当にスワップしにくさを設定できるのか
https://qiita.com/rarul/items/a96b61b1fb535dea5fe3
※本記事よりこちらを読んだ方がよっぽど詳しいです。

Swappiness – Wikipedia
https://en.wikipedia.org/wiki/Swappiness

Share this…