記事ディレクトリ
このような状況に遭遇したことはありませんか?ウェブサイトへのアクセスが突然遅くなり、500 エラーが発生していました。PHP-FPM を再起動すると正常に戻りました。しかし、しばらくすると問題が再発しますか?本当にイライラします!
なぜこうなった?実際、これは通常PHP-FPM プロセス プールが正しく構成されていないか、サーバー リソースが不足しています。によって引き起こされる。今日は徹底的に最適化します ヘスティアCP 内部の PHP-FPM により、Web サイトは極めて安定します。
PHP-FPMが過負荷になる主な理由
PHP-FPMはプロセスマネージャー動的なリクエストを処理する役割を担います。構成が適切でない場合、次のような問題が発生する可能性があります。
- サーバーリソースが枯渇しましたこれにより、PHP-FPM は新しいリクエストにタイムリーに応答できなくなります。
- プロセスが少なすぎるトラフィックが急増すると、時間内に処理できなくなります。
- プロセスの使用率が高すぎる、CPU 負荷が爆発的に増加します。

PHP-FPM がオーバーロードされているかどうかを確認するにはどうすればよいでしょうか?
使える top 或 htop CPU とメモリの使用状況を表示するコマンド:
top -c
次のようなプロセス情報が表示される場合、PHP-FPM が高負荷で実行されていることを意味します。
1669293 abc 20 0 790284 227880 185568 R 73.1 0.9 1:30.09 php-fpm: pool chenweiliang.com
1669522 abc 20 0 801924 224224 170236 R 69.9 0.9 0:59.01 php-fpm: pool chenweiliang.com
これらのプロセスが CPU の 70% 以上を占めていることがわかりますか?これが頻繁に起こる場合は、PHP-FPM 問題があるに違いない!
では、サーバーが過負荷にならないように PHP-FPM 構成を最適化するにはどうすればよいでしょうか?
PHP-FPM プロセスプールの最適化 (コアパラメータの調整)
まず、開く php-fpm 構成文例:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *PHP8.3 などの PHP バージョンに変更し、次のように変更します。
/etc/php/8.3/fpm/pool.d/www.conf
HestiaCP によって設定された PHP バージョンを照会する
v-list-web-domain user domain.com
例えば:
v-list-web-domain abc chenweiliang.com
出力には次のようなものが表示されます。
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
これは、サイトが PHP 8.3。
PHP-FPM の設定を見てみましょう。
[chenweiliang.com]
listen = /run/php/php8.3-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660
user = abc
group = abc
pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s
あなたはあなたの pm 使用されるのは ondemand、アイドル時間中のリソース使用量を削減できますが、トラフィックが急増した場合、プロセスが時間内に応答できない可能性があります。結果的に 500 エラーが発生します。
1. PHP-FPMプロセスプールパラメータを調整する
構成が dynamic一部の業務プロセスを事前に起動しておき、リクエスト量に応じて動的に調整する方式です。これにより、リクエスト量が急増した場合でも、より早く対応することができます。
ある程度のトラフィックがあるウェブサイトの場合は、 pm = dynamic一定量のアイドル プロセスを維持し、高い同時実行性時に 500 エラーを回避できるためです。
アクセス量が極めて少なく、メモリリソースが逼迫している場合にのみ使用することをお勧めします。 pm = ondemand リソースを節約するため。
提案 ondemand、最適化する pm.max_children その他のパラメータ:
pm = dynamic
pm.max_children = 16 ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4 ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2 ; 最小空闲进程数
pm.max_spare_servers = 7 ; 最大空闲进程数
pm.max_requests = 3000 ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s ; 空闲进程 10s 后自动退出
なぜこのように変更したいのですか?
pm = dynamic: オンデマンドによって発生する可能性のあるリクエストの待機を回避するために、プロセスをより柔軟に割り当てます。pm.max_children = 16: プロセス数が少なすぎるために発生する 500 エラーを防止します。pm.start_servers = 5: プロセスの起動が遅くなるのを防ぎます。pm.max_requests = 3000:メモリリークの防止定期的にプロセスをリサイクルします。
2. PHPスクリプトの実行時間を制限して、長時間の占有を防ぐ
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
これにより、CPUを大量に使用するPHPスクリプトはサーバーをダウンさせる可能性がある。
保存後、PHP プロセスを再起動します。
sudo systemctl restart php8.3-fpmPHP-FPMステータス監視を有効にして、いつでも進行状況を追跡します。
PHP-FPMプロセス監視を有効にしていつでも表示できます現在アクティブなプロセスの数とリクエストの待機ステータスサーバーの過負荷を避けるためです。
で php-fpm.conf 追加されたもの:
pm.status_path = /status
次に、Nginx の設定を行います。
location /status {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
このようにして、 http://yourdomain.com/status PHP-FPM の動作を確認してください。
PHP-FPM ログを最適化して問題を迅速にトラブルシューティングする
で php-fpm.conf 追加:
php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s ; 执行超过 5s 的脚本记录到日志
この方法では、500 エラーが発生するたびに、ログを直接表示できます。
tail -f /var/log/php-fpm/error.log
PHPが次のようなエラーを報告しているかどうかを確認します。 out of memory、script execution timeout などなど。
メモリリークを防ぐためにPHP-FPMを定期的に再起動する
合格できる cron 長時間実行されるプロセスによる問題を防ぐために、PHP-FPMを定期的に再起動してください。メモリリーク。
crontab -e
毎日午前 3 時に PHP-FPM を自動的に再起動するには、次のスケジュールされたタスクを追加します。
0 3 * * * /usr/sbin/service php8.3-fpm restart
問題が解決しない場合はどうなりますか?さらなる最適化!
上記の最適化を引き続き実行する場合時々500エラーが発生する、次の最適化を続行できます。
1. OPcacheを有効にしてPHPの実行効率を向上させる
OPcache がまだ有効になっていない場合は、次のようにインストールできます (Ubuntu を例に)。
sudo apt install php8.3-opcache -y
編集する php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
効果? PHP ページの実行速度が大幅に向上しました!
2. Nginx設定の最適化
Nginx関連のパラメータが適切であることを確認してください。 fastcgi_read_timeout 実行時間が長いために PHP スクリプトが Nginx によって終了されるのを避けるために、適切に調整します。
fastcgi_read_timeout 60s;
client_max_body_size 100M;
概要: PHP-FPM を最適化すると、Web サイトがクラッシュしなくなります。
この最適化後にどのような調整を行いましたか?
✅ PHP-FPM プロセスプールの最適化、使用する ondemandそして最適化する pm.max_children パラメータ;
✅ PHPスクリプトの実行時間を制限する、CPU の長時間占有を防ぐため。
✅ PHP-FPM監視を有効にするプロセス負荷をリアルタイムで表示します。
✅ PHP-FPM ログの最適化500 エラーを迅速にトラブルシューティングします。
✅ PHP-FPMを定期的に再起動するメモリリークを防止します。
✅ OPcacheを有効にするPHP の実行効率を向上します。
✅ Nginx 設定の最適化タイムアウトの問題を回避するためです。
この最適化により、PHP-FPM の負荷が大幅に軽減され、Web サイトの動作がより安定します。 🔥
今すぐお試しください! 💪🚀
Hope Chen Weiliang ブログ ( https://www.chenweiliang.com/ ) が共有した「HestiaCP PHP-FPM の負荷が高すぎますか?動的 Web ページで 500 エラーが発生していますか?この最適化はすぐに有効になります。 ”」が役に立つかもしれません。
この記事のリンクを共有することを歓迎します。https://www.chenweiliang.com/cwl-32512.html
さらに多くの隠されたトリックのロックを解除するには、Telegram チャンネルにぜひご参加ください。
気に入ったらシェアして「いいね!」してください!あなたのシェアと「いいね!」が私たちの継続的なモチベーションです。