サイトの PHP コードは、ワーカープロセスにより処理されます。これには、ページの構築、バックグラウンドタスクの処理、データベースへのクエリなどが含まれます。

ワーカープロセスを例えるなら、レジのようなもの。各ワーカープロセスは一度にひとつのお会計(リクエスト)しか処理することができません。もし買い物客がレジより多ければ、列に並んで、順次、処理を待つ必要があります。

ワーカープロセスは、サイトがコンテンツのほとんどをキャッシュしていない、あるいはキャッシュできない場合に特に効果を発揮します。ウェブサイトが動的であればあるほど、より多くのワーカープロセスが必要になるでしょう。通常、キャッシュされたコンテンツにワーカープロセスは不要で、これが必要になるのは、サイトが情報を取得したり変更したりするためにデータベースにクエリを実行するときだけです。

WordPressとワーカープロセス

WordPressサイトでキャッシュされないリクエストは、通常次のようなものです。

  1. 訪問者がページを訪問し、ページ上でアクション(カートに入れる、フォームを送信する、など)を実行する
  2. ウェブサーバー(KinstaではNginx)がそのリクエストを受信する
  3. NginxがPHPにリクエストを渡す
  4. PHPがMySQL データベースに問い合わせ、情報を取得し、必要とされる更新を行う
  5. その後、PHPがテーマのPHPファイル(および該当する場合はプラグインファイル)を使用して、HTMLページを生成する
  6. PHPは、レンダリングされたHTMLページをウェブサーバーに返す
  7. ページが訪問者に配信される

上記のプロセスでは、ステップ4が最も時間とリソース(CPUとRAM)を消費します。効率的なPHPコードとデータベースクエリで最適化されたサイトでは、このステップの処理はかなり速く行われます。

一方、不適切に書かれた、あるいは最適化されていないPHPコードや、非効率的なデータベースクエリの多くは、ステップ4を通過する際に、多くの時間を要します。処理に時間がかかるリクエストは、長い時間ワーカープロセスを独占します。

必要なワーカープロセス数の見積もり

サイトにどれくらいのワーカープロセスが必要かは、サイトがいかに動的か、コードの最適化(リクエストの処理速度)度合い、サイトのトラフィックの種類など、いくつかの要因に依存します。最適化されたサイトでは、リクエストが素早く処理され、ワーカープロセスが次々に解放されていきます。

ECサイト、フォーラム、学習サイト、会員制サイトなどの動的なサイトは、静的な(例えば、単に情報を掲載した)サイトよりも、通常、多くのワーカープロセスを必要とします。また、サイトが「多忙を極める」ほど、多くのワーカープロセスが必要になります。

ワーカープロセス、CPU、RAM

ワーカープロセスの調整の際には、CPUとRAMといったリソースを考慮する必要があります。ワーカープロセスを増やしても、サーバーのCPUやRAMがそれをサポートするのに十分でなければ、リクエストを効率的に処理できません。

Kinsta独自のLXDコンテナは、十分なCPUとRAMリソースで構成されています。さらに、Google Cloudの最速CPUを搭載したコンピューティング最適化C2仮想マシンを使用することで、お客様のサイトのワーカープロセスがより一層効率的に機能します。スケーラブルなインフラストラクチャで、WordPressサイトのワーカープロセスが最高のパフォーマンスを発揮できるよう十分なCPUが確保されます。

ワーカープロセスに関連するパフォーマンスの問題を特定する

大量のリクエストの流入、長時間のプロセス稼働、またはその両方により、キューに多くのリクエストが蓄積すると、サイトのパフォーマンスに問題が生じ、502または504エラーが発生する可能性があります。

KinstaのAPMツールや「Query Monitor」プラグインを使用することで、パフォーマンスの問題や遅いクエリを特定することができます。また、問題を診断するために、パフォーマンスの改善に精通したプロの力を借りることをお勧めします。

APMを有効にする(MyKinstaで利用可能)
APMを有効にする(MyKinstaで利用可能)

MyKinsta「分析」画面のワーカープロセス数上限到達回数で、サイトに割り当てられたワーカープロセスの上限に到達した回数を確認できます。サイトで頻繁にワーカープロセス不足が発生しているかどうかの判断に使えます。問題が特定された場合には、新しいPHPバージョンに更新することで、解決できる可能性があります。

ワーカープロセス数上限到達回数
ワーカープロセス数上限到達回数

MyKinsta「分析」のキャッシュでは、サイトでのキャッシュ比率やリクエスト数上位のキャッシュバイパスなどを確認することができます。

キャッシュ比率
キャッシュ比率
リクエスト数上位のキャッシュバイパス一覧
リクエスト数上位のキャッシュバイパス一覧

ワーカープロセス使用量の削減と最適化

キャッシュ

ページキャッシュ

キャッシュを使い、サイトを最適化し、必要なワーカープロセスの数を減らすことができます。キャッシュされたコンテンツにはワーカープロセスは必要ないので、できる限りキャッシュを行うことが推奨されます。Kinstaでは、お客様に代わり、ページキャッシュを実装しています。すべてのサイトでNginxのFastCGIキャッシュモジュールを使用し、超高速パフォーマンスが実現しています。

オブジェクトキャッシュ

データベースのためにRedisのような永続的オブジェクトキャッシュを用意することで、パフォーマンスが向上し、ワーカープロセスの必要性が減ります。オブジェクトキャッシュがなければ、MySQLデータベースのクエリは、同じクエリと結果であっても、リクエストごとに実行されることになります。

Redisはデータベースクエリの結果をRAMに保存します。これにより、PHPはクエリを何度も実行することなく、その結果を取得可能です。データベースへのクエリを繰り返す必要がなくなることで、リソース節約になり、ワーカープロセスはより効率的にリクエストを処理することができます。

Redisキャッシュのサイトへの追加については、プレミアムアドオンをご覧ください。

コードの最適化

サイトのコードを最適化することも重要です。可能な限りの効率性を求めましょう。独自のコード、テーマのコード、プラグインのコードなど、全てに言えることです。確信が持てない場合は、開発者にサイトのコードの見直しを依頼することをお勧めします。

カスタムコード

プラグインやテーマにカスタムコードスニペットが含まれている場合、それが本当に必要なものか、きちんと書かれているかを確認しましょう。

プラグイン

サイトで使用しているプラグインをよく見て、本当に必要なものか、機能が重複していないか、必要な機能に対して最適な選択肢であるかどうかを確認しましょう。WordPressやPHPの最新版と互換性のないプラグインがある場合は、他の選択肢を検討する必要があるかもしれません。使用していないプラグインがある場合は、削除することをおすすめします。

テーマ

軽量でパフォーマンスの高いテーマを使用すること。別のプラグインで実装するのが好ましい機能(SEO、検索フィルタリング、カスタムフィールド、画像スライダー/スライドショーなど)が組み込まれたテーマや、必要のない機能で煩雑になっているテーマは避けましょう。

PHPのバージョンアップ

最新バージョンのPHPを使用することで、パフォーマンスの向上が期待できます。PHPベンチマークからわかるように、各PHPバージョンは前のバージョンよりも高速である傾向にあります。

KinstaのCDNの有効化

KinstaのCDNを有効にすると、サイトの効率と最適化がさらに進みます。KinstaのCDNは、Cloudflareを土台とした、Kinsta提供の高性能HTTP/3 CDNです。ご利用に追加費用は一切かかりません。これを有効にすると、お客様のサイトは世界中のあらゆる場所から静的なアセットを配信できるようになります。

パフォーマンスに精通したプロへの相談

サイトの最適化に精通している方には必須ではありませんが、検討に値する便利な選択肢です。プロにサイトのあらゆる側面の分析、ボトルネックの特定、解決策の実行を任せてしまうことができます。