【WordPress】Rocky Linux + Apache + PHP-FPM環境で表示が遅いときの高速化設定

はじめに

WordPressのプラグイン販売サイトを構築するにあたり、以前から契約していた「さくらのVPS」にWordPressをインストールしました。

サーバ構成は、以下のような一般的なLAMP系の構成です。

  • Rocky Linux
  • Apache
  • PHP
  • PHP-FPM
  • MySQL / MariaDB
  • WordPress

ところが、実際にWordPressをインストールしてサイトへアクセスしてみると、ページが表示されるまでにかなり時間がかかる状態になっていました。

WordPressの場合、テーマやプラグインが原因で表示速度が遅くなることもありますが、今回はWordPress側だけではなく、VPSのPHP実行環境やApache、PHP-FPMの設定についても確認しました。

この記事では、Rocky Linux + Apache + PHP-FPM環境でWordPressの表示速度が遅かった際に、実際に確認・変更した内容をまとめます。

今回のサーバ構成

今回WordPressを構築した環境は、おおよそ以下の構成です。

  • VPS:さくらのVPS
  • OS:Rocky Linux
  • Webサーバ:Apache
  • PHP:PHP 8.3
  • PHP実行方式:PHP-FPM
  • CMS:WordPress

WordPressについては、今後WordPressプラグインなどを販売するための自社サイトとして利用する予定です。

しかし、WordPressをインストールした直後からページ表示に時間がかかっていたため、まずはサーバ側の設定から確認することにしました。

WordPressが遅い原因を確認する

WordPressの表示が遅い場合、いきなり設定を変更するのではなく、まずはどこに時間がかかっているのか確認します。

代表的には以下のような原因が考えられます。

  • PHPの処理が遅い
  • PHP-FPMの設定が適切ではない
  • OPcacheが無効
  • Apacheの設定
  • MySQL / MariaDBの処理
  • WordPressプラグイン
  • WordPressテーマ
  • 外部JavaScript
  • DNS
  • SSL通信
  • サーバのメモリ不足

今回は、特にPHPとPHP-FPM周りを中心に確認しました。

PHPのバージョンを確認する

まずPHPのバージョンを確認します。

php -v

今回の環境では、PHP 8.3系が動作していました。

php 8.3.x

古いPHPを使用している場合は、PHPのバージョンアップだけでもWordPressのパフォーマンスが改善する場合があります。

OPcacheが有効になっているか確認する

WordPressの高速化で重要なのが、PHPのOPcacheです。

PHPは通常、PHPファイルを読み込み、解析・コンパイルして実行します。

OPcacheを有効にすると、コンパイル済みのPHPコードをメモリ上に保持できるため、毎回PHPファイルを解析する必要がなくなります。

OPcacheの状態は以下で確認できます。

php -i | grep -i opcache

例えば、

opcache.enable => On => On

となっていればOPcacheは有効です。

今回の環境でも、

opcache.enable => On => On

となっており、OPcache自体は正常に有効になっていました。

PHP-FPMの設定を確認する

次にPHP-FPMの設定を確認します。

Rocky Linuxでは、PHP-FPMの設定ファイルとして以下を確認します。

/etc/php-fpm.d/www.conf

設定値だけ確認したい場合は、以下のコマンドが便利です。

sudo grep -E "^(pm|pm.max_children|pm.start_servers|pm.min_spare_servers|pm.max_spare_servers|pm.max_requests)" /etc/php-fpm.d/www.conf

今回の設定は最終的に以下のようにしました。

pm = dynamic
pm.max_children = 8
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500

pm.max_requestsを設定する

今回確認した中で、最初は

pm.max_requests

が設定されていませんでした。

そこで、

pm.max_requests = 500

を追加しました。

pm.max_requestsは、PHP-FPMの各ワーカープロセスが何回リクエストを処理したら再起動するかを指定する設定です。

例えば、

pm.max_requests = 500

の場合、500リクエストを処理するとPHP-FPMの子プロセスが再生成されます。

WordPress本体やプラグイン、PHPライブラリなどで少量のメモリリークが発生していたとしても、プロセスを定期的に作り直すことで、メモリ使用量が増え続けることを防ぎやすくなります。

PHP-FPMを再起動する

設定を変更したらPHP-FPMを再起動します。

sudo systemctl restart php-fpm

続いて、正常に起動しているか確認します。

sudo systemctl status php-fpm --no-pager

以下のように、

Active: active (running)

となっていればPHP-FPMは正常に起動しています。

PHP-FPM設定ファイルの文法チェック

PHP-FPMを再起動する前に、設定ファイルの文法エラーを確認しておくと安全です。

sudo php-fpm -t

正常な場合は、以下のようなメッセージが表示されます。

NOTICE: configuration file /etc/php-fpm.conf test is successful

特に本番環境では、設定ファイルを変更した直後にサービスを再起動するのではなく、

sudo php-fpm -t

で確認してから再起動することをおすすめします。

サーバのメモリ使用量を確認する

VPSの場合は、メモリ不足もWordPressが遅くなる原因になります。

以下のコマンドで確認できます。

free -h

確認するポイントは、

Mem
Swap
available

です。

Linuxでは空きメモリをキャッシュとして積極的に使用するため、単純にfreeだけを見るのではなく、

available

も確認することが重要です。

また、Swapが常に大量に使用されている場合、ディスクI/Oが発生してWordPressのレスポンスが遅くなる可能性があります。

curlでWordPressの応答速度を計測する

ブラウザだけでは、「WordPressそのものが遅いのか」「画像やJavaScriptの読み込みが遅いのか」判断しにくいため、curlでも計測しました。

以下のコマンドを使用します。

curl -o /dev/null -s -w \
"DNS: %{time_namelookup}\nConnect: %{time_connect}\nSSL: %{time_appconnect}\nTTFB: %{time_starttransfer}\nTotal: %{time_total}\n" \
https://example.com/

確認できる主な項目は以下です。

DNS
Connect
SSL
TTFB
Total

中でもWordPressのサーバ性能を見る際に重要なのが、

TTFB

です。

TTFBは「Time To First Byte」の略で、ブラウザやcurlがサーバへアクセスしてから、最初のデータが返ってくるまでの時間です。

高速化後の計測結果

PHP-FPMなどの設定を見直したあと、再度curlで計測しました。

結果は以下のようになりました。

DNS: 0.007秒
Connect: 0.007秒
SSL: 0.040秒
TTFB: 0.178秒
Total: 0.184秒

TTFBが約0.18秒となりました。

ここまで下がっていれば、少なくともApache + PHP-FPM + WordPressのサーバレスポンスとしては、かなり改善したと判断できます。

ブラウザ上で表示がまだ遅い場合には、次の段階として、

  • WordPressテーマ
  • プラグイン
  • CSS
  • JavaScript
  • Webフォント
  • 画像サイズ
  • 外部サービスへの通信

など、フロントエンド側を調査していくことになります。

WordPress高速化ではキャッシュプラグインだけを見ない

WordPress高速化というと、

「キャッシュプラグインを入れる」

という方法が最初に紹介されることが多いです。

もちろんキャッシュプラグインも有効ですが、VPSの場合はその前に、

Apache
↓
PHP-FPM
↓
PHP
↓
OPcache
↓
WordPress
↓
テーマ・プラグイン

という構成を理解しておくことが重要です。

特にPHP-FPMやOPcacheが適切に動いていない状態では、WordPress側だけを高速化しても根本的な解決にならない場合があります。

今回実施したWordPress高速化対策まとめ

今回、Rocky LinuxのVPS上でWordPressの表示速度を改善するために確認した内容は以下です。

  1. PHPのバージョン確認
  2. OPcacheが有効か確認
  3. PHP-FPMの設定確認
  4. pm.max_childrenなどのプロセス数を確認
  5. pm.max_requests = 500を設定
  6. PHP-FPMを再起動
  7. メモリとSwapを確認
  8. curlでTTFBを測定

最終的に、

TTFB:約0.18秒

まで改善することができました。

まとめ

Rocky Linux + Apache + PHP-FPM環境にWordPressを構築した際、ページの表示がかなり遅かったため、PHP-FPMやOPcacheを中心にサーバ設定を確認しました。

VPSの場合、レンタルサーバとは異なり、PHP-FPMやApacheなども自分で設定できます。

その反面、初期設定のままではWordPressに適した設定になっていない可能性があります。

WordPressの表示速度が遅い場合は、すぐにキャッシュプラグインを追加するのではなく、

PHP 
PHP-FPM 
OPcache 
メモリ 
TTFB

などを確認し、まずサーバ側にボトルネックがないか調べることをおすすめします。

今後は、WordPress側のキャッシュ設定や画像最適化、JavaScript・CSSの高速化についても検証していきたいと思います。