WebArenaからXServerに移行し、メモリを6GBまで増強したものの、スワップの使用量増加が止まらず。
これをチューニングによりなんとか抑えられたというメモ書きです。
経緯
- スペックの負荷状況を調べるためにGrowiを導入
- 十分な性能が見込めたためにNextcloudやBookStackなどを入れていく
- それでも稼働していったのでRedmineの移行を終える。
- Redmineを入れた途端、スワップ使用率が高くなった。
環境
- Ubuntu / Debian系OS
- Apache 2.4
libapache2-mod-passenger
がインストール済み- Redmineを複数稼働
チューニングの目的
上記環境のmod_passenger
は、筆者のように複数のアプリケーションを、リソースが限られたVPSで運用する場合(いわゆる逸般的な使い方)は、メモリを過剰に消費し、サーバー全体のパフォーマンスを低下させる可能性があります。
事実、free -h
コマンドで、Swap
の使用量が放置しているのに高まってきたという状況でした。
そこで、リクエストがあれば都度、プロセスを増やしてしまうpassengerの機能をチューニングで抑制します。
さっくりとした手順
- passengerの設定ファイルのバックアップを行います。
- ファイルの修正によるチューニングを行います。
- 設定を反映させ、状況を確認します。
Passengerの設定ファイルをのバックアップ
※この設定は、バーチャルサイト個別設定ではなく、一括で設定を行います。
なぜなら、Passenger関連のディレクティブが、<VirtualHost>
ブロックの中に書くことができないからです。
- ファイルのバックアップ
sudo cp -pi /etc/apache2/mods-available/passenger.conf /path/to/backup/direcotry/passenger.conf.$(date +%Y%m%d)
バックアップディレクトリは自分の環境に合わせます。(筆者環境:/etc/conf/backup
)
- ファイルのバックアップ確認
diff -u -pi /path/to/backup/direcotry/passenger.conf.$(date +%Y%m%d) /etc/apache2/mods-available/passenger.conf
差分がなく、エラーがなければバックアップはできています。
メモリ管理ディレクティブを追記
上記passenger.conf
ファイルを開き、<IfModule mod_passenger.c>...</IfModule>
ブロックの中に、以下の設定を追記します。
<IfModule mod_passenger.c>
PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
PassengerDefaultRuby /usr/bin/ruby
# --- ▼ここから追記▼ ---
# Passengerが起動するRubyプロセスの最大数を4に制限
PassengerMaxPoolSize 4
# 各アプリケーションごとに起動する最大プロセス数を1に制限
PassengerMaxInstancesPerApp 1
# プロセスが300秒(5分)アイドルだったら停止させる
PassengerPoolIdleTime 300
# --- ▲ここまで追記▲ ---
</IfModule>
各ディレクティブの解説
ディレクティブ | 説明 |
---|---|
PassengerMaxPoolSize | Passengerがサーバー全体で起動するRubyプロセスの最大総数です。サーバーのメモリ上限を超えないよう、搭載メモリ量に応じて設定します。 |
PassengerMaxInstancesPerApp | 各アプリケーションごとに起動できるプロセスの最大数です。例えば1 に設定すると、一つのRedmineサイトは同時に1つのプロセスしか使えなくなります。 |
PassengerPoolIdleTime | プロセスがここで指定した秒数以上アクセスがない場合、Passengerはそのプロセスを停止させ、メモリを解放します。 |
設定の反映
ファイルを保存した後、Apacheを再起動して設定を反映させます。
- 構文確認
sudo apache2ctl configtest
Syntax Ok
を確認します。エラーが出たらその箇所を確認し、Syntax OK
が出るまで修正します。
- Apache再起動
sudo systemctl restart apache2.service
- Apache再起動確認
systemctl status apache2.service
Running(Active)
を確認します。
動作確認
この状態で一晩ほど様子を見ました。
free -h
total used free shared buff/cache available
Mem: 5.8Gi 3.3Gi 551Mi 141Mi 2.3Gi 2.4Gi
Swap: 2.0Gi 1.5Mi 2.0Gi
のまま。チューニング前はSwapを100~500MBも使用していたことから、動作は安定。設定は有効のようです。
コメントを残す