[Linux]Swapの使用頻度を下げる方法
普段の仕事で多くのLinuxサーバーを運用保守していますが、たまに事業部の方から「アプリの速度が遅い」といった話を聞かされることがあります。
で、原因を探っていくととあるサーバーにおいて物理メモリが空いているにも関わらずSwap使用率が高い状態のものが見つかったりします。
ここ最近まで知らなかったんですが、このSwap領域をどれぐらいの優先度で使用するかを制御できるらしいので、試してみました。
とりあえず試すならsysctl
とりあえず試してみて様子見するのであれば、sysctlコマンドで一時的に値を変更して見る方法をオススメします。
この設定方法は再起動すると元の値に戻るので、逆に恒久的な設定を入れたい場合はオススメしないです。
sysctl vm.swappiness = 10
もしくは以下の方法でも同じ効果が得られます。
echo 10 > /proc/sys/vm/swappiness
どちらもswappinessという値を変更していますが、この値は0~200の範囲で指定することができ、0に近ければSwapをなるべく使わないようにする動きをします。
調べてみたところこの値を0にするとSwap自体が無効になるらしいので、基本的には1以上を指定するのが無難そうです。
ちなみに、デスクトップ環境ではデフォルトが60になっているそうですが、デスクトップ環境の場合にはいじらなくても良いと思います。
この辺りは環境によって調整するのが良いと思います。
今回の私のケースではMySQLの使用しているメモリがSwap領域に食い込んだことによる速度低下が原因だったので、1を指定して様子を見ています。
恒久的な変更は/etc/sysctl.confを書き換え
上記で紹介した方法では揮発性の設定なので再起動すると元に戻ってしまいます。
再起動後も設定した値を保持したい場合には、/etc/sysctl.confに以下の文字列を追加してあげます。
vm.swappiness = 10
AlmaLinux8.7で確認した所既存の設定には無かったので、新規追加で入れています。
/etc/sysctl.confを書き換えて反映させる場合は、sysctlコマンドで設定を反映させてあげます。
sysctl -p