Linuxでswap最適化を行って物理メモリを限界まで使い切る

      2016/03/25

Linuxでswapの最適化を行う

Linuxでサーバを運用していると、メモリ不足でSwapが発生することがあります。で、このSwapなのですが、発生頻度を少しだけ調整できます。デフォルト設定だと、物理メモリに余裕があってもSwapが発生します。これを調整すると、少しだけSwapの発生を抑えることができます。

設定しておくと幸せになると思います。

■パラメータ

下記のファイルに0〜100の数値が記載されています。

/proc/sys/vm/swappiness

この数値を0にすると、物理メモリを使い切るまでSwapを発生させません。100にすると、とにかくSwapするようになります。パフォーマンス激落ちです。デフォルトは60です。この数値を0にしてしまえば数値を1以上に設定すれば、メモリを最大まで使い切るようになります。

追記 2016/3/25

はてなブックマークのコメントで、swappinessを0にするとOOMKiller発動でプロセスが死んでしまうのでは??と複数いただいております。

まずは文献で調べてみた結果、swappinessの値はrhel6.4以降のシステムでは1以上を推奨しているようです。このpdfの【3.3.7 Setting Virtual Memory】の項目に「積極的にスワップアウトを回避して、メモリギリギリでシステム動かしているときは、OOMKillerが発動するリスクが高くなる。」と書いてあります。

 

オラクルを利用しているときはvm.swappinessは10を推奨しているという文章もあります。利用する環境しだいで変えないといけないのですね。
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-memory-tunables.html

わたし、最近のLinuxでもvm.swappiness=0で運用していました。。。怖い。ご指摘頂きました皆様、本当にありがとうございます。

 

■一時的に有効にする

以下のコマンドをrootで実行します。一時的にシステム全体の設定を変更することが可能です。

echo 1 > /proc/sys/vm/swappiness
ただし、この方法だとサーバ再起動をすると設定が消えてしまいます。

※2016/3/25修正 環境やシステムによっては、swappiness=0だとOOMKiller発生のおそれがあるので、1以上にしましょう。

 

■恒久的に有効にする

/etc/sysctl.confに以下のように追記して設定します。

vm.swappiness = 1

以下のコマンドで設定を再読み込みして完了です。これでサーバ再起動をしても設定が消えることはありません。

sysctl -p

 

 

調整すると少しだけ幸せになるかもしれないですね。参考にしてみてください。

megane

megane

最近、個人事業主から法人へと進化しました。 エンジニア歴13年位です。PHPとかMysqlを使ってWebシステムを構築します。 Javaも書きます。 CakePHPも使います。 サーバのチューニングもごりごりやります。 あと、お肉と自動車が好きです。Twitterとか申請どうぞ。

 - CentOS , ,