...

PHP実行時間 WordPress:スクリプトのランタイムがウェブサイトをブロックする仕組み

php 実行時間 ワードプレス は、サーバーがPHPスクリプトを停止し、リクエストをブロックするまでの実行時間を決定します。スクリプトの実行時間がタイムアウトを引き起こす理由、賢明な制限の設定方法、読み込み時間を顕著に短縮するサーバーとWordPressの設定について具体的に説明します。.

中心点

以下の点は、私がすぐに実行できる最も重要な調整と優先事項をまとめたものである。.

  • 限界 正確には、タスクによって60~300秒。.
  • 原因 見つける:遅いプラグイン、大きなクエリ、I/Oボトルネック。.
  • 方法 php.ini、wp-config.php、.htaccess。.
  • ホスティング 最適化する:PHPのバージョン、メモリ、キャッシュ、PHP-FPM。.
  • モニタリング 挿入する:測定し、比較し、再び調整する。.

コンテクスト そして、全体的に値を上げるのではなく、作業量を増やす。こうすることで、フォローアップの問題を回避し、サイトを高速に保ち、そして 安定性 一目瞭然。

タイムアウトの裏にあるもの

各リクエストは、データを取得し、プラグインをロードし、HTMLを出力するPHPスクリプトを開始します。 タイムアウト. .多くのホストでは、この制限は30秒で、単純なページには十分ですが、バックアップやインポート、大規模なショップクエリにはすぐに短くなりすぎます。その結果、„Maximum Execution Time Exceeded “やホワイトページが表示され、ユーザーをがっかりさせ、ランキングを下げてしまう。私はまず、実際の原因が非効率なコードなのか、I/Oの遅延なのか、外部APIの待ち時間なのかを確認してから、スライダーを上げるようにしています。より深く掘り下げたい場合は、このコンパクトなガイドで制限とページ効果に関する背景情報を見つけることができます 実行制限, これは、スクリプトの実行時間とサーバー負荷の相関関係を示している。.

WordPressの代表的なトリガー

キャッシュが不十分なスタートページ、複雑なクエリループ、多数の 資産 一緒に。インポートプラグインは大きなCSVファイルと格闘し、データベースが弱いとcronジョブはブロックされ、画像オプティマイザーは遅いI/Oを待ちます。WooCommerceは、バリアント、フィルター、価格計算の負荷によって複雑さを増します。配送、ERP、支払いプロバイダー用のAPIも応答を遅延させ、効果的なスクリプティング時間を急増させる可能性がある。このようなことが積み重なって、私はトリガーを段階的に分離・除去しています。 制限 を増やす。

時間を増やすべき時

私は 実行時間, 大規模なインポート、バックアップ、複雑なマイグレーション、ショップの同期など、予測可能で、実行頻度の低いタスクをより長く実行する必要がある場合。ブログやリーンなサイトでは60-120秒で十分なことが多く、ショップやサイト構築では180-300秒に設定している。プロセスが外部サービスと連携する場合は、一時的な待ち時間がクラッシュの原因にならないようにバッファを計画する。とはいえ、私は慎重である。極端に高い値はパフォーマンスの弱点を隠し、欠陥のあるプラグインがプロセスをクラッシュさせるリスクを高めるからだ。 サーバー がブロックされる。私は最小の作業値を目指し、スクリプトが並行して実行する実際の作業を最適化する。.

実行時間を変更する:3つの方法

私はホスティングが許す範囲でリミットを調整し、各変更を日付と値で記録してクリーンにしている。 トレース. .アクセスできない場合は、wp-config.phpのset_time_limitを使います。Apacheの場合は.htaccessを使います。各変更の後、私は効果を正しく比較できるように、同じタスクで再現テストを行います。また、ホスティング業者が機能をブロックしている場合は、サーバーのログをチェックする。次の表は、私がすぐに適切な方法を見つけられるように、方法、例、適合性をまとめたものである。 オプション を見つける。.

方法 ファイル/場所 メリット デメリット こんな人に向いている
php.ini サーバー/パネル max_execution_time = 300 セントラル, グローバルに適用 再起動が必要。 VPS/マネージドパネル
wp-config.php ワードプレスルート set_time_limit(300);; 早く、, 閉じる WPへ ホスティング業者によってブロックされることがある 共有ホスティング、テスト
htaccess アパッチルート php_value max_execution_time 300 単に サイト Apacheのみ、信頼性なし シングルセットアップ、トランジション

本当に役立つホスティング・チューニング

私はPHP 8.xで始める。 メモリリミット を256-512MBに設定し、サーバーキャッシュを有効にして、高価なPHP作業を最小限に抑えます。PHPのバージョンを最新にすることで、リクエストごとのCPU時間を短縮し、タイムアウトの可能性を大幅に減らすことができます。データベースキャッシュ、オブジェクトキャッシュ、CDNは、I/Oとネットワークの負荷を軽減し、PHPに余裕を与えます。アクセス頻度の高いサイトでは、リクエストが並列に実行され、キューが形成されないように十分な数のPHPワーカーを用意します。 PHP作業員. .また、プラグインを整理したり、重いテーマを入れ替えたり、スクリプトや画像を最小化したりしています。 サーバー時間 管理部門ではなく、実際の仕事のために。.

複数の値:メモリ、DB、I/O

ランタイム データベースの応答が遅い場合、ディスクの速度が遅かったり、RAMの容量が少なかったりすると、スワップが必要になる。インデックスのない大きなテーブルは、高速なCPUでも処理速度を低下させます。そのため、私はインデックスをチェックし、長いクエリを作り直します。オフロードのないメディア・ライブラリはI/Oを増加させ、イメージ・オプティマイザーやバックアップを拡張する可能性がある。外部APIも重要だ:サービスがもたつくと、私のスクリプトも待たされる。そのため、私は、サービスごとに最適化するのではなく、チェーン全体で最適化するようにしている。 制限.

セキュリティと制限を賢く設定する

高すぎる タイムアウト 共有ホスティングでは、エラーが隠蔽され、ロック時間が長くなり、リスクが高まります。私は各ユースケースごとに上限を決めています。コンテンツは60-120秒、ショップや管理作業で処理が多い場合は180-300秒です。非常に重いタスクの場合は、ウェブランタイムを無制限に増やすのではなく、ジョブをCLIに設定したり、バックアップをオフロードしたりします。また、潜在的にリスクのあるプラグインを制限し、リピーターのログをチェックしています。こうして安定性、パフォーマンス セキュリティ バランスが取れている

モニタリング:推測ではなく測定する

クエリの実行時間、フックの実行時間、外部からの待ち時間を測定してから判断し、クエリごとに結果を比較する。 修正. .クエリモニタのようなツールは最悪のクエリを表示し、サーバーログは異常値や504/508のピークを表示します。同じデータセット、同じ時間、同じウォームアップフェーズ。値が限界に達したら、キャッシュやより小さなバッチで実際の作業量を減らす。それでも十分でないときだけ、私は注意深く 制限.

PHP-FPM、ワーカー、並列処理

PHP-FPMによる制御 max_children, pm および request_terminate_timeout は、いくつのプロセスが並行して実行され、PHP がそれらを終了するタイミングを指定します。ワーカーが少なすぎるとキューが作成され、多すぎると RAM が圧迫され、スワップが作成されます。私は常に、実行時間をプロセス数、I/O、キャッシュヒット率と一緒に考えています。もっと深く掘り下げたいなら、以下のサイトに役立つヒントがある。 PHP-FPM-Children そして、不正確なブロックリクエストの制限方法。このように タイムアウト 無意味に膨らんだ。.

練習計画:ステップ・バイ・ステップ

まず、現在のPHPのバージョン、memory_limit、アクティブなキャッシュ、そして既存のPHPのステータスをチェックする。 過去ログ. .その後、同じプロセスでエラーを再現し、必要な時間とリソースを記録します。クエリーを短くする、画像を圧縮する、プラグインチェーンを減らす、バッチサイズを小さくするなど、原因を最適化します。その後、タイムアウトを180-300秒に適度に増やし、負荷をかけて再度テストします。最後に、変更を文書化し、モニタリングを設定し、フォローアップテストを計画します。 安定性 は永久に残る。.

PHP以外のサーバーとプロキシのタイムアウト

PHP内部の制限と 上流のタイムアウト ウェブサーバーまたはプロキシレベルで。たとえ 最大実行時間 が十分に高い場合、Nginx/Apacheやロードバランサー、CDNによってリクエストが事前に終了される可能性があります。そこで、補足的なチェックを行う:

  • Nginx: fastcgi_read_timeout (PHP-FPMの場合)、, proxy_read_timeout (アップストリーム用)、, クライアント・ボディ・タイムアウト 大容量アップロード用。.
  • アパッチだ: タイムアウト, プロキシタイムアウト および必要に応じて. FcgidIOTタイムアウト/プロキシFCGI-パラメータ。.
  • リバースプロキシ/CDN:レスポンスタイムとアップロード時間の上限を厳しく設定(アップロードや長いRESTコールなど)。.

に自分を合わせる。 最短 チェーン最小の制限が勝つ。値が一致しない場合、十分なPHP時間があるにもかかわらず、504/502エラーが発生します。長いアップロード(メディア、インポートファイル)の場合は、次のチェックも行います。 max_input_time そして ポスト・マックス・サイズ, というのも、大きなボディを読み込むことで、サーバーの時計も動き続けるからだ。.

CLIとバックグラウンドジョブを賢く使う

ウェブリクエストを人為的に引き伸ばす代わりに、重い仕事を コマンドラインインタフェース あるいは非同期キューで使用します。PHP の CLI-SAPI には 30 秒という厳しい制限がないことが多く、 インポートやマイグレーション、インデックス再作成などに適しています。.

  • WP-CLI私はクーロンイベント(wp cron event run --due-now)、インポーターを起動したり、大量の操作を繰り返しテストしたりする。こうしてブラウザの切断やプロキシのタイムアウトを回避している。.
  • システムクーロンページ呼び出しごとにWP-Cronを設定する代わりに、本当のcronjobを設定します。 wp cronイベント実行 を希望する間隔で実行する。これにより、フロントエンドのユーザーは安心し、ランタイムは安定する。.
  • スクリーン/プロセス制御長いCLIジョブは スクリーン 或いは タムックス, SSH切断時に中断しないようにする。.

私はこれに小さな バッチ (例えば、1回の実行につき100~500のデータレコード)をオフセット経由で処理する。これにより、メモリ消費とロック時間を低く保ち、1つの異常値がジョブ全体をブロックするリスクを低減する。.

WordPress:Cron、アクションスケジューラ、バッチ処理

定期的な作業や大量の作業には、次のような方法があります。 キュー戦略 決定的。私は使っている:

  • WP-クーロン 軽くて頻繁なタスクのために、システムクーロンによってクリーンなインターバルを確保する。.
  • アクションスケジューラ (DBをオーバーランさせないように、キューの長さを監視し、同時実行を控えめに設定しています。.
  • バッチパターン管理しやすい塊でデータをロードし、トランザクションを短く保ち、部分的な結果を確認し、エラーの場合はリトライとバックオフで続行する。.

一時的に作業が難しいRESTや管理者ルートの場合、私はロジックをカプセル化する。 こぶ, そして実際の処理はバックグラウンドで行う。これにより、やるべきことがたくさんあるときでも、フロントエンドのタイムアウトを防ぐことができる。.

WordPress HTTP API:外部サービスのタイムアウト

多くのタイムアウトは、スクリプトが以下のような遅い動作に反応するために発生する。 API を待つ。PHPのランタイム全体を膨張させるのではなく、接続とレスポンスに明確な制限を設けている。フィルターを使って、的を絞った調整をしています:

add_filter('http_request_args', function ($args, $url) { // 短く接続するが、現実的なレスポンスバッファを残す。
    // 短く接続するが、現実的なレスポンスバッファを残す
    $args['timeout'] = 20; // リクエストの合計時間
    $args['redirection'] = 3; // リダイレクトの回数を減らす
    if (function_exists('curl_version')){
        $args['connect_timeout'] = 10; // ターゲットに到達できない場合、すぐに失敗する。
    }
    return $args;
}, 10, 2);

また、リトライを制限し、重要なエリアを サーキットブレーカー失敗を繰り返した後は、短いブロックを設定し、エラー・レスポンスを最小限にキャッシュし、サイト全体を緩和する。ウェブフックについては、私は非同期で計画を立てる。 ダウンストリーム - リモート・ステーションに何分も待たせることなく応答できる。.

データベースとオプションの具体的なチューニング

長いPHP時間はしばしばカモフラージュになる DBブレーキ. .私は構造的なアプローチを取る:

  • 遅いクエリログ を実行し、EXPLAIN を使って上位の遅延器を分析する。.
  • インデックス をチェックする:メタデータクエリでは、マッチするキーは ポストID そして メタキー その価値は十分にある。私は巨大なテキストフィールドでのフルテキストを避け、フィルタを使用することを好む。.
  • wp_options declutter:オートロードされるオプションを1-2MB以下に抑える。古いトランジションを削除し、不要なエントリーを削除する。.
  • 一括更新 ロック時間は短く保たれ、サーバーは息ができる。.

私はオブジェクトキャッシュ(Redis/Memcachedなど)を使ってホットキーをメモリに保持し、キャッシュの無効化を確認している。 ターゲット 変更するたびにテーブルを空にするのではありません。これにより、リクエストあたりの PHP の CPU 時間が短縮され、実行制限を増やす必要性が減ります。.

ウェブサーバーごとの具体的なサーバー設定

環境に応じて、効果的なところでタイムアウトを設定し、値を一定に保つ:

  • Apache + PHP-FPM: プロキシタイムアウト そして SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost" mod_fcgid の場合 FcgidIOTタイムアウト チェックする。
  • Nginx: fastcgi_read_timeout, proxy_read_timeout, クライアント・ボディ・タイムアウト そして send_timeout をユースケースに追加する。.
  • LiteSpeed/LSAPIPHP-External-App Limits (Memory/IO/Timeout) および 最大接続数 RAM容量による。.

私は、PHPのタイムアウト、ウェブサーバーのタイムアウト、プロキシのタイムアウトの組み合わせを、次のように保っている。 なし アップストリームリミットの値は、予想されるジョブ時間よりも小さい。私はバッファを計画するが、不良ループがワーカーを数分間ブロックするのを防ぐ。.

OPcacheとバイトコード:CPU時間の節約

ランタイムの大部分は、PHPファイルのパースやコンパイルの際に生成されます。クリーンな オペキャッシュ CPUの時間を節約し、リクエストを短縮する:

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2

私は、コードベースを常に退避させることなく保持するのに十分なキャッシュメモリを選択する。これにより、リクエストごとのCPU負荷が軽減され、実行時間に反してジョブが実行される可能性が低くなります。JITは個々のケースでは役に立ちますが、典型的なWordPressのワークロードではゲームチェンジャーになることはほとんどありません。.

トラブルシューティングのチェックリストとキャパシティプランニング

タイムアウトが発生したら、私は短いリストに目を通す:

  • 切断症状PHPのタイムアウトとプロキシからの504/502を識別する。.
  • 過去ログ をチェックする:PHPエラーログ、FPMスローログ、ウェブサーバーとデータベースのログ。.
  • ホットトレイル を測定します:クエリ・モニター、影響を受けるルートのプロファイリング。.
  • キャッシング チェック:オブジェクトキャッシュが有効か?キャッシュのヒット率は十分か?
  • バッチサイズ 減らす:半分にし、もう一度テストし、目標値を見つけることを繰り返す。.
  • 外部の待ち時間 制限をかける:HTTPタイムアウト、スロットルリトライを設定します。.
  • サーバーパラメーター を調和させる:PHP、FPM、プロキシのタイムアウトを調和させる。.

については 定員 管理ジョブが20秒実行され、PHPワーカーが8人いるとすると、その間は並列性の1/8がブロックされる。トラフィックが平均200msで同時に実行される場合、ワーカーあたり~5RPSを達成します。重いジョブは 外側 ピーク時には、(RAMフレームワーク内で)必要であればワーカー数を一時的に増やし、フロントエンドを遅くすることなくキューを処理できるようにする。.

概要

php 実行時間 ワードプレス は重要だが、それだけで基本的な問題が解決することはほとんどない。私は賢明な値を設定し、ブレーキを取り除き、ワーカー、メモリ、キャッシュ、データベースを調和させます。明確な計測値、小さなバッチ、適度な制限値により、管理ジョブは安定し、ページビューは高速に保たれます。これによりタイムアウトを防ぎ、スムーズな運用を維持し、不必要な負荷からサーバーを守ります。構造的なアプローチをとれば、スピードが上がります、, 信頼性 盲目的に飛ぶことなく、静かな操作で。.

現在の記事

ネットワーク管理者が最新のデータセンターでサーバーとデータトラフィックをリアルタイムに可視化して監視
サーバーと仮想マシン

ホスティングプロバイダーがトラフィックを優先する方法最適なネットワークパフォーマンスのための戦略

ホスティングプロバイダーが、インテリジェントなトラフィックシェーピングホスティングと帯域幅管理を通じて、どのようにトラフィックに優先順位を付けているかをご覧ください。サーバーネットワークのパフォーマンスを最適化する多層的な戦略。.