テーマをCocoonに変更しました!
その他

ConoHa VPS 1GBプランのKUSANAGIでメモリ不足を解消!php-fpm設定変更で利用可能メモリが3倍になった体験談

FavoriteLoadingお気に入り登録
その他

KUSANAGI 1GBプランのメモリ不足をphp-fpm設定変更で解決する方法

はじめに

ConoHa VPS(1GBプラン)でKUSANAGI + WordPressを運用していると、メモリ不足に悩まされることがあります。今回はnginxの脆弱性対応をきっかけにサーバー状態を確認したところ、メモリがひっ迫していることが判明。php-fpmの設定を見直すことで大幅な改善に成功しました。同じ環境で運用している方の参考になれば幸いです。

環境

項目内容
VPSConoHa VPS 1GBプラン
OSAlmaLinux 9
KUSANAGI9.8.9-1.el9
Webサーバーnginx129(nginx 1.29.8)
PHPPHP 8.3(php-fpm)
DBMariaDB 10.6

Step 1:nginxの脆弱性対応状況を確認する

nginxにv1.29.8以降へのアップデートを推奨する脆弱性情報が公開されました。KUSANAGIではnginxを独自パッケージで管理しているため、以下のコマンドでバージョンを確認します。

nginx -v は使えないので、rpmコマンドで確認します。

rpm -q kusanagi-nginx129

実行結果:

kusanagi-nginx129-1.29.8-1.el9.x86_64

nginx 1.29.8 がインストール済みであることが確認でき、脆弱性対応は完了していました。

Step 2:メモリ状況を確認する

ついでにサーバーのメモリ状況を確認してみました。

free -h

実行結果:

totalusedfreeavailable
Mem762MB689MB68MB73MB
Swap2.0GB704MB1.3GB

利用可能なメモリがわずか73MB、さらにSwapを704MBも消費しており、かなり危険な状態でした。

Step 3:メモリを食っているプロセスを特定する

何がメモリを消費しているか調べます。

ps aux --sort=-%mem | head -20

結果を見ると、php-fpmのプロセスが14本以上起動しており、1プロセスあたり約100〜148MBのメモリを消費していました。

プロセス本数1本あたり合計(概算)
php-fpm: pool www14本以上約100〜148MB約1,400MB以上

1GBのRAMに対して、php-fpmだけで1GB以上を要求している状態です。これではSwapが溢れるのも当然です。

Step 4:php-fpmの設定を確認する

まず設定ファイルの場所を確認します。

find /etc/opt/kusanagi -name "www.conf"

見つかったパス:/etc/opt/kusanagi/php-fpm.d/www.conf

現在の設定を確認します。

cat /etc/opt/kusanagi/php-fpm.d/www.conf | grep -E "^pm"

実行結果:

設定項目変更前の値意味
pmdynamicプロセス数を動的に管理
pm.max_children50最大プロセス数
pm.start_servers10起動時のプロセス数
pm.min_spare_servers5最小待機プロセス数
pm.max_spare_servers15最大待機プロセス数
pm.max_requests500プロセスが処理するリクエスト数上限

pm.max_childrenが50、start_serversが10という設定は、1GBプランには完全にオーバースペックです。

Step 5:php-fpmの設定を変更する

sedコマンドで一括変更します。

sed -i 's/pm.max_children = 50/pm.max_children = 5/' /etc/opt/kusanagi/php-fpm.d/www.conf
sed -i 's/pm.start_servers = 10/pm.start_servers = 2/' /etc/opt/kusanagi/php-fpm.d/www.conf
sed -i 's/pm.min_spare_servers = 5/pm.min_spare_servers = 1/' /etc/opt/kusanagi/php-fpm.d/www.conf
sed -i 's/pm.max_spare_servers = 15/pm.max_spare_servers = 3/' /etc/opt/kusanagi/php-fpm.d/www.conf

変更後の設定を確認します。

cat /etc/opt/kusanagi/php-fpm.d/www.conf | grep -E "^pm"
設定項目変更前変更後
pm.max_children505
pm.start_servers102
pm.min_spare_servers51
pm.max_spare_servers153

Step 6:KUSANAGIを再起動して反映する

kusanagi restart

「restart completed.」と表示されれば成功です。

結果:メモリが大幅に改善

free -h
変更前変更後
メモリ使用量689MB517MB
空きメモリ68MB157MB
利用可能メモリ73MB245MB(約3.4倍)
Swap使用量704MB439MB(265MB減)

利用可能メモリが73MBから245MBへと約3.4倍に改善、Swapの使用量も265MB減少しました。

注意点

pm.max_childrenを5に絞ったことで、6人以上が同時にページにアクセスした場合はPHPの処理待ちが発生する可能性があります。ただし、KUSANAGIはfcache(静的キャッシュ)機能を持っており、キャッシュが有効なページはPHPを経由しないため、実際の影響はほとんどありません。個人ブログや中小規模のサイトであれば、この設定で十分運用できます。

まとめ

KUSANAGIのデフォルト設定はある程度スペックのあるサーバーを想定しているため、1GBプランでそのまま使うとメモリが不足しがちです。php-fpmのプロセス数を適切に絞るだけで、今回のように劇的な改善が見込めます。1GBプランでKUSANAGIを使っている方はぜひ一度確認してみてください。

正直1Gプランだと表示速度もそれほど早くないし、というより遅い気がしてて、メンテなど考えるとConHa WINGに変えようかと悩んでました。
しばらくはこの設定で様子見です!

気になる中古パソコン

Supported by Rakuten Web Service

コメント

※当サイトは、Amazon、楽天アソシエイト・他プログラムの参加者です。リンクを通じて商品を購入すると、紹介料を得る場合があります。
タイトルとURLをコピーしました