PHPパフォーマンス
WordPressサイトのパフォーマンスは、PHPスレッドの数が多ければ自動的に向上するというわけではありません。
- キャッシュ:効果的なキャッシュは、リクエストごとに動的にコンテンツを生成する代わりにキャッシュされたコンテンツを提供し、PHPスレッドの負荷を軽減します。これにより、特に頻繁にアクセスされるリソースのパフォーマンスを大幅に改善することができます。
- ハードウェア:CPU、メモリ(RAM)、ディスク速度など、サーバー上で使用可能なハードウェアリソースは、 PHPスレッドのパフォーマンスに直接影響します。リソースが不足すると、処理時間が遅くなったりパフォーマンスが低下したりします。
- ウェブサーバーの設定:ウェブサーバーの設定やPHPとの相互作用は、スレッドのパフォーマンスに影響を与えます。
- データベースの速度:PHPアプリケーションは、動的コンテンツを生成するためにMySQLデータベースからデータを取得することがよくあります。データ取得の速度は、データベースの構成、クエリの最適化、 データベースサーバーのパフォーマンスなどの要素に依存します。これらの要素は、PHP アプリケーション全体のパフォーマンスに直接影響します。
- PHPバージョン:パフォーマンスの向上やバグ修正、 セキュリティの更新により、PHPのバージョンが新しいほど、一般にPHPスレッドのパフォーマンスが改善されます。
Kinstaは、サイトパフォーマンスの重要性を理解し、PHPパフォーマンスを最大化し、PHPリクエストを最小限に抑えることを目的とした以下のような技術を実装しています。
- CDNとサーバーレベルの両方でページキャッシュを提供し、カスタマイズ可能なルールでキャッシュ効率を最大化します。
- Google Cloudの最速CPUを搭載したプレミアムサーバー(C2およびC3D仮想マシン)を使用し、サイトのPHPスレッドの効率的な実行を支援します。
- スケーラブルなインフラストラクチャにより、WordPressサイトのPHPスレッドが最高のパフォーマンスで動作するのに十分なCPUリソースを確保します。
- Google Cloudのプレミアムティアネットワークを利用し、レイテンシを最小限に抑えます。また、MySQLサーバーやウェブサーバーなど、データがインフラのさまざまなコンポーネント間を移動する時間が大幅に短縮されます。
- ローカルでホスティングされ、高度に最適化されたMySQLサーバーを提供することで、ネットワークの待ち時間を短縮し、データの検索と処理速度を向上させています。
- MySQLサーバーにはInnoDBバッファがあり、ディスクI/O操作を減らすことでデータベースのパフォーマンスが向上します。データはディスクからではなくメモリからより迅速にアクセスすることができ、読み取りおよび書き込み操作の効率が上がり、MySQLデータベースの全体的なパフォーマンスが改善されます。
- PHPの最新バージョンを常にサポートし、パフォーマンスを最大化します。
PHPパフォーマンスを見る
「WordPressサイト」>(サイト名)>「情報」画面でPHPパフォーマンスを表示することができます。
このセクションには、以下の情報が表示されます。
- 合計PHPメモリ:PHPスレッドに分散されたPHPメモリの合計
- PHPスレッド:サイトあたりのPHPスレッド(ワーカープロセス)数。各スレッドは一度に1つのリクエストを処理するワーカープロセスであるため、スレッド数が多いほどより多くの同時リクエスト数を処理できます。キャッシュされたコンテンツは、PHPスレッドをバイパスし、データベースへのクエリやデータの変更時にのみ必要となります。
- スレッドあたりのメモリ:各PHPスレッドがリクエスト処理中に使用できるメモリ(RAM)の最大量
- スレッド上限到達回数:過去24時間に発生した「PHP thread limit reached(PHPスレッドの上限に達しました」エラーの数。このエラーは、サイトが正常に読み込まれず、訪問者に500エラーが表示されたことを意味します。このエラーの主な原因には、以下のようなものがあります。
- トラフィックの急増─セール中やイベント開催時にトラフィックが突然急増した場合、使用可能なPHPスレッドがすべて使用できなくなることで、このエラーが発生することがあります。
- 最適化されていないコード─ 遅いまたは重いPHPスクリプトは実行に時間がかかり、 スレッドが長時間占有された状態になります。PHPスクリプトに複雑なデータベースクエリや非効率なデータベースクエリが含まれている場合は、実行プロセスのボトルネックになる可能性があります。
- 非効率なプラグインやテーマ─プラグインやテーマの中には、サーバーのリソースを過剰に消費し、スレッド処理の遅延につながるものがあります。プラグイン単体ではリソースを大量に消費しなくても、プラグインが多すぎるとPHPの処理速度が低下します。
- バックグラウンドタスク─長時間実行されるバックグラウンドプロセスやcronジョブ(バックアップやデータベースの定期的なクリーンアップなど)は、PHPのスレッドリソースを消費し、制限に達する一因となります。
- DDoS攻撃またはボット─分散型サービス拒否(DDoS)攻撃や大量のボットトラフィックがサーバーを圧倒し、利用可能なPHPスレッドをすべて消費して、このエラーが発生することがあります。
- メモリ上限到達回数:過去24時間に発生した「PHP Fatal error: Allowed memory size of xxx bytes exhausted(許容メモリサイズを超えました)」エラーの数。このエラーは、サイトが正常に読み込まれず、訪問者に500エラーが表示されたことを意味します。このエラーの主な原因には、以下のようなものがあります。
- 大規模なデータ処理─大規模なデータセット、画像、ファイルを処理するスクリプト(CSVインポート、画像操作など)は、多くのメモリを消費するため、このエラーを引き起こすことがあります。
- コードのメモリリーク─使用後に解放されない変数、オブジェクト、または大きな配列の不適切な処理は、メモリリークを引き起こすため、メモリの大量消費につながることがあります。
- 非効率なコードやアルゴリズム─大きな配列やオブジェクトを最適化された処理方法でメモリに保存しなければ、メモリを使い果たすことがあります。ファイルやネットワーク接続、その他の外部リソースを適切に閉じずに開くスクリプトにより、メモリ使用量が徐々に増加します。
- 質の低いプラグインやテーマ─プラグインやテーマによっては、非効率なコードや不十分な最適化によりメモリを過剰に消費します。個々のプラグインがそれほどメモリを消費していなくても、多数のプラグインがインストールされ、有効化されていると、全体としてメモリの上限を超えてしまう可能性があります。
- バックグラウンドタスク─cronジョブ、事前に設定されている自動タスク、バックグラウンドスクリプトなど、長時間実行されたり、大量のデータを処理したりするものは、特に最適化されていない場合は、エラーの原因になります。
PHPパフォーマンスを変更する
「WordPressサイト」>(サイト名)>「情報」画面の「PHPパフォーマンス」セクションで「変更する」をクリックします。
このウィンドウでは、現在ご利用のプランの「メモリプール総量」が表示されます。メモリプールは、PHPスレッドに割り当てられたPHPメモリの合計で、例えば4つのPHPスレッドがあり、メモリプール総量が2GBの場合、各PHPスレッドのPHPメモリの上限は512MBとなります。
「メモリプール総量」を変更すると、PHPスレッドに分散されるメモリの総量を増やすことができます。スライダーを使って調整することも可能です。
- スレッド数増加:スライダーをこの方向に動かすと、サイトのPHPスレッド数を増やすことができます。スレッド数を増やすと、その数に応じてPHPメモリが自動的に分散されます。例えば、16のスレッドで合計2GBのメモリプールを使用している場合、各スレッドのPHPメモリ上限は128MBになります。スレッドを8に増やしてメモリプールを同じにした場合、各スレッドのPHPメモリの上限は256MBになります。
スレッドを増やせば、より多くのリクエストを同時に処理できるようになりますが、スレッドあたりのメモリが少ないと、大きなデータベースクエリやメディアアップロードのようなメモリ集約型のタスクでは、使用可能なメモリをオーバーしてエラーを引き起こす可能性があります。これは、サイトを構成する際に考慮すべき重要な点になります。
ECサイトやCMSを利用したウェブサイト、フォーラムなど、リアルタイムでコンテンツを生成する動的なサイトでは、スレッド数を増やすことが推奨されます。固定コンテンツを提供する静的なサイト、ブログ、ドキュメント、 パンフレット形式のサイトなどでは、一般にPHPのスレッド数を増やす必要はありません。
キャッシュを使用してコードを最適化することで、スレッドの使用数を減らすことができます。スレッド使用数削減の詳細についてはこちらをご覧ください。 - メモリ増加:スライダーをこの方向に動かすと、スレッドあたりのPHPメモリ上限を増やすことができます。ただし、メモリプールを増やさない場合は、使用可能なPHPスレッド数が減少します。スレッドあたりのメモリ上限は1024MBです。例えば、16のスレッドで合計2GBのメモリプールを使用する場合、各スレッドのPHPメモリ上限は128MBとなります。メモリプールを増やさずにメモリ上限を引き上げると、PHPスレッドは2になり、スレッドあたりのPHPメモリ上限は1024MBとなります。
各スレッドにより多くのメモリを割り当てることで、コンテンツのアップロードなど、メモリを大量に消費するタスクをより効率的に処理できるようになります。多数のプラグインを使用しているサイトや、大規模なデータベースリクエストを行うサイトでは、最適化されたパフォーマンスを維持するためにスレッドあたりのメモリを増やすことが推奨されます。ただし、スレッド数が少ないと、サイトが同時に処理できる受信リクエストの数は少なくなります。
値を変更すると、スライダーの下の画像に、更新された値とスレッドとメモリ間での分配が表示されます。
スレッドとメモリの割り当てを調整したら、「続行」をクリックします。メモリプールを増やした場合は、PHPパフォーマンスアドオンが追加されます。アドオン料金の詳細は次の画面に表示されます。月額料金は次のお支払いに適用され、自動的に日割り計算で料金が加算されます。
注)このアドオンは日割り計算で料金が算出されるため、ブラックフライデーなどの大きなイベントで高トラフィックが予想される場合に、一時的にメモリプール、スレッド、またはメモリ総量を増やすことができます。イベント終了後に設定を元に戻すことで、アドオンを利用した日数分のみ料金を支払うことができます。
WordPress専用サーバープランのご利用開始から、30日以内にメモリプール総量を減らしてアドオンを削除した場合、日割り計算で料金が算出され、翌月のお支払い額に加算されます。WordPress専用サーバープランのご利用開始から30日以上経過している場合は、現在の請求サイクルの残りの日数分の料金がアカウント残高にクレジットとして加算されます。このクレジットは、次回のお支払い料金と相殺されます。詳細については、WordPress専用サーバーの返金保証をご覧ください。
ステージング環境
「メモリプール総量」は、本番環境でのみ変更できます。本番環境で行った調整は、すべての標準およびプレミアムステージング環境に適用されます。
本番環境でメモリプール総量、またはスレッド数を変更した場合、標準ステージング環境のスレッドあたりのメモリ割り当てはそれに応じて調整されます。ただし、標準ステージング環境の最大スレッド数は2に制限され、それぞれ512MBのメモリ上限を持つことになります。
プレミアムステージング環境では、スレッド数とメモリを本番環境とは別に柔軟に調整可能です。
メモリプール総量、スレッド数、メモリ上限の分配値
以下は、メモリプール総量ごとのメモリとスレッド数の分配パターンです。
メモリプール総量─512MB
PHPスレッド数 | スレッドあたりのメモリ |
---|---|
2 | 256MB |
4 | 128MB |
8 | 64MB |
メモリプール総量─1GB
PHPスレッド数 | スレッドあたりのメモリ |
---|---|
2 | 512MB |
4 | 256MB |
8 | 128MB |
16 | 64MB |
メモリプール総量─1.5GB
PHPスレッド数 | スレッドあたりのメモリ |
---|---|
3 | 512MB |
6 | 256MB |
12 | 128MB |
24 | 64MB |
メモリプール総量─2GB
PHPスレッド数 | スレッドあたりのメモリ |
---|---|
2 | 1024MB |
4 | 512MB |
8 | 256MB |
16 | 128MB |
32 | 64MB |
メモリプール総量─2.5GB
PHPスレッド数 | スレッドあたりのメモリ |
---|---|
2 | 1024MB |
5 | 512MB |
10 | 256MB |
20 | 128MB |
メモリプール総量─3GB
PHPスレッド数 | スレッドあたりのメモリ |
---|---|
3 | 1024MB |
6 | 512MB |
12 | 256MB |
24 | 128MB |
メモリプール総量─4GB
PHPスレッド数 | スレッドあたりのメモリ |
---|---|
2 | 2048MB |
4 | 1024MB |
8 | 512MB |
16 | 256MB |
32 | 128MB |
より多くのPHPスレッドが必要な場合、またはスレッドあたりのメモリ上限をさらに引き上げたい場合は、専用サーバーのご利用をお勧めします。
PHPパフォーマンスアドオンの削除
すべてのサイトからPHPパフォーマンスアドオンを削除するには、画面右上のユーザー名をクリックし、「企業の設定」>「ご利用プラン」に移動して、「PHPパフォーマンス」セクションの「削除」をクリックします。
この操作により、プランに含まれる元のPHPメモリとスレッドにリセットされます。確認ウィンドウには、どのサイトからアドオンが削除されるか、リセット後のメモリプール総量が表示されます。確認の上、「PHPパフォーマンスアドオンの削除」をクリックすれば完了です。
個々のサイトのPHPパフォーマンスアドオンを削除するには、PHPパフォーマンスを変更し、「メモリプール総量」をプランに含まれるデフォルト値に減らすことができます。また、ユーザー名>「企業の設定」>「PHPパフォーマンス」セクションの「削除」をクリックして、すべてのサイトからアドオンを削除することも可能です。
確認ウィンドウには、アドオンが削除されるサイトと、リセット後のPHPメモリプール総量、スレッド数、スレッドあたりのメモリが表示されます。確認の上、「PHPパフォーマンスアドオンの削除」をクリックして完了です。
WordPress専用サーバープランのご利用開始から、30日以内にアドオンを削除した場合、日割り計算で料金が算出され、翌月のお支払い額に加算されます。WordPress専用サーバープランのご利用開始から30日以上経過している場合は、現在の請求サイクルの残りの日数分の料金がアカウント残高にクレジットとして加算されます。このクレジットは、次回のお支払い料金と相殺されます。詳細については、WordPress専用サーバーの返金保証をご覧ください。
PHPメモリアドオン
PHPメモリアドオンは、メモリ上限を256MBから512MBに増やすことができます。利用するにはMyKinstaにログイン後、「WordPressサイト」>(サイト名)>「アドオン」>「PHPメモリ」セクションに移動してください。
WordPress専用サーバープランのご利用開始から、30日以内にPHPメモリアドオンを削除した場合、日割り計算で料金が算出され、翌月のお支払い額に加算されます。WordPress専用サーバープランのご利用開始から30日以上経過している場合は、現在の請求サイクルの残りの日数分の料金がアカウント残高にクレジットとして加算されます。このクレジットは、次回のお支払い料金と相殺されます。詳細については、WordPress専用サーバーの返金保証をご覧ください。
PHPパフォーマンスの問題を特定する
KinstaのAPMツール
KinstaのAPMツールやQuery Monitorプラグインのようなツールを使用すると、パフォーマンスの問題や遅いクエリを特定することができます。または、PHPパフォーマンスに精通した開発者やエージェンシーと協力して問題を特定することも可能です。
PHPスレッド上限
MyKinstaで「WordPressサイト」>(サイト名)>「分析」画面の「パフォーマンス」タブを開き、「PHPスレッド上限」チャートを確認します。
PHPスレッドが連続で10秒間何もタスクを処理しない場合、PHPスレッドプロセスは自動的に終了します。再びスレッドが必要になると、スレッドプロセスは即座に再生成されます。このグラフは、サイトで割り当てられたスレッドの最大数に何回達したかを示します。
例えば、WP 5プランでは、最大4つのPHPスレッドプロセスを使用できます。3つのPHPスレッドが使用されている状態で、PHPスレッドを必要とする別のリクエストを受けた場合、新たにPHPスレッドが作成され、最大数である4つのPHPスレッドが稼働することになり、PHPスレッドの上限に到達したとみなされます。
これはPHPスレッド数の上限に達した回数が記録されているだけであり、PHPスレッドが使用されていた時間は記録されないため、PHPスレッドの使用状況を完全に把握することはできません。
例えば、サイトのトラフィックが急増し、すべてのPHPスレッドが1時間にわたって常にビジー状態のまま稼働し、一度も終了することがなかったとします。この場合、PHPスレッドの上限に達したのは1回のみで、その1時間はPHPスレッドが使用されていないように見えるかもしれません。30分後にトラフィックが減少し、1つのPHPスレッドが10秒間アイドル(停止)状態になると、 そのスレッドは自動的に終了します。1分後にPHPスレッドが再び必要になると、PHPスレッド上限に再び達することになり、PHPスレッドの上限に到達したとみなされます。
サイトのPHPスレッド数を増やすには、「WordPressサイト」>(サイト名)>「情報」>「PHPパフォーマンス」セクションの「変更する」をクリックしてください。
サイトのパフォーマンスを調査し、サイトがPHPスレッドを継続的に使用しているかどうかを判断するには、SSH接続でツールを使用してPHPスレッドのアクティビティを監視することができます。例えば、以下のカスタムコマンドは、0.3秒ごとに稼働中のPHPスレッドの数を監視します。
watch -n 0.3 "ps aux | awk '◆$(NF-2) ~ /php-fpm/ && ◆$(NF-1) ~ /pool/ && ◆$8 ~ /R/ { print ◆$0 }' | wc -l" このコマンドは終了します。
このコマンドを終了するには、CMD + C、またはCTRL + Cを押して、両方のキーを放してください。
PHPメモリ上限
MyKinstaで「WordPressサイト」>(サイト名)>「分析」画面の「パフォーマンス」タブを開き、「PHPメモリ上限到達回数」チャートを確認します。
このグラフは、PHPメモリ上限に達した回数を示しています。弊社デフォルトのPHPメモリ上限は256MBであり、これはほぼすべてのWordPressプラグインとサイトには十分な値です。この上限は、PHPスクリプトがメモリを過剰に消費するのを防ぐために設定されるもので、上限を高く設定しすぎると、誤った設定や壊れたスクリプトがメモリを過剰に使用して深刻な問題を引き起こす可能性があります。
メモリの上限に達した回数は記録されますが、各回の継続時間は記録されないため、PHPのメモリ使用状況を部分的にしか分析することができません。
お客様のサイトが弊社で正しく設定されている場合、通常PHPのメモリ上限に達することはありません。上限に到達している場合は、PHPスレッドの使用数を減らして、最適化することをお勧めします。
サイトのPHPメモリ上限は、「WordPressサイト」>(サイト名)>「情報」>「PHPパフォーマンス」セクションの「変更する」をクリックして変更可能です。
キャッシュの分析
MyKinstaの「分析」画面にある「キャッシュ」タブを開くと、キャッシュ推移、リクエスト数上位のキャッシュバイパス一覧、キャッシュ比率を確認できます。
PHPスレッドの使用数削減と最適化
キャッシュ
キャッシュを効果的に使用することで、サイトを最適化し、必要なPHPスレッド数を減らすことができます。キャッシュされたコンテンツにはPHPスレッドは不要になるため、キャッシュできるものはすべてキャッシュすることをお勧めします。
ページキャッシュ
Kinstaではページキャッシュを提供しており、すべてのサイトでNginxのFastCGIキャッシュモジュールを使用し、超高速パフォーマンスを実現しています。
エッジキャッシュ
エッジキャッシュは、お客様のサイトまたはページキャッシュをCloudflareの260以上のデータセンターのグローバルネットワークに保存します(通常はサイトのデータセンターでのみ保存)。これにより、訪問者がサイトにアクセスすると、キャッシュされたコンテンツが訪問者から最も近い場所から配信されるため、パフォーマンスとサイト速度が最大40%改善されます。
オブジェクトキャッシュ
データベースへのリクエストの前にRedisのような永続オブジェクトキャッシュを追加することで、パフォーマンスを向上させ、PHPスレッドの必要性を低減することができます。オブジェクトキャッシュを使用しない場合、MySQLデータベースのクエリは、同じクエリであってもリクエストごとに実行されます。
Redisはデータベースクエリの結果をRAMに保存するため、PHPはクエリを再度実行することなく結果を取得することができます。データベースクエリを繰り返し実行する必要がなくなるため、 PHPスレッドが消費するリソースを削減し、より効率的にリクエストを処理できるようになります。
Redisキャッシュアドオンを追加して利用可能です。
コードの最適化
サイトのコード(カスタムコード、テーマおよびプラグインのコード)を最適化し、可能な限り効率化することをお勧めします。作業に抵抗がある場合は、開発者に依頼してください。
カスタムコード
サイトにプラグインやテーマのカスタムコードが含まれている場合、その必要性と整合性を確認してください。
プラグイン
サイトで使用しているプラグインを確認し、機能の重複がないか、本当に必要であるかなどを再度検討します。WordPressやPHPの最新バージョンと互換性のないプラグインがあれば、他の選択肢に乗り換えることをお勧めします。また、使用していないプラグインは削除しましょう。
テーマ
軽量で高パフォーマンスのテーマを使用してください。プラグインで実装する方が適切である機能(SEO、検索フィルタリング、カスタムフィールド、画像スライダー/スライドショーなど)を含むテーマや、サイトに不要なテーマの使用は避けましょう。
PHPの更新
最新のPHPバージョンを使用して、パフォーマンスを最大限に向上しましょう。PHPベンチマークでは、新しいバージョンの方がパフォーマンスに優れていることがわかっています。
CDNの使用
KinstaのCDNを使用すると、サイトの効率と最適化がさらに改善されます。Kinstaでは、Cloudflare提供の高性能HTTP/3 CDNを追加料金なしで提供しており、世界中に性的アセットを高速配信することができます。
プロへの相談
サイトの最適化に精通している場合は不要かもしれませんが、パフォーマンス最適化を専門とする開発者やWeb制作会社に連絡し、サイトのあらゆる側面の分析、ボトルネックの特定、解決策の実施などを依頼することもできます。