記事ディレクトリ
HestiaCPサーバーのCPUスパイクが発生しましたか?PHP-FPMプロセスの最適化に関する完全ガイド!

サーバーのCPU使用率が常に100%になっていませんか?ファンが異常なほど高速回転していませんか?ウェブサイトの読み込みが遅いですか?原因はphp-fpmかもしれません!
私は最近発見した chenweiliang.com このPHPプール php-fpm プロセスが CPU を大量に消費し、サーバーがクラッシュしました。
サーバーを復活させるために、一連の最適化手法を試し、最終的にCPU使用量を削減することに成功しました。
それでは、この効率的な最適化ガイドを共有しましょう!🚀
1. php-fpmプロセスの数を制限する
php-fpmのデフォルト設定では、無制限の数のプロセスが生成される可能性があり、サーバーのCPU負荷過多を引き起こす可能性があります。
最適化するには、プロセス管理パラメータを変更します。
開く 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を使用していることを示しています。
次のパラメータを見つけて変更します。
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 后自动退出
その後再起動 php-fpm 効果を上げるには:
sudo systemctl restart php-fpm
✅効果: php-fpmがCPUリソースを過剰に消費するのを防ぐため、プロセス数を制限します。
2. OPCacheを有効にする(PHPのパフォーマンスを向上させるため)
PHP は実行されるたびにコードを再解析するため、リソースが無駄になります。
解決策は? OPCache を有効にして PHP コードをキャッシュします。
編集します php.ini 資料:
sudo nano /etc/php/*/fpm/php.ini
以下を追加または変更します。
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0 # 禁用实时检测,提高性能
保存後、PHP プロセスを再起動します。
sudo systemctl restart php8.3-fpm
✅効果:PHPコードの繰り返し解析を減らし、CPU負荷を軽減し、実行効率を向上させます。
3. PHPスクリプトの最大実行時間を制限する
PHP スクリプトの実行時間が長すぎると、CPU リソースが継続的に占有されます。
適切なタイムアウト期間を設定すると、「頑固な」プロセスが長時間サーバーを占有するのを防ぐことができます。
開く php.ini 資料:
sudo nano /etc/php/*/fpm/php.ini
次のパラメータを変更します。
max_execution_time = 30 # PHP 脚本最多执行 30 秒
max_input_time = 30 # 处理输入数据最多 30 秒
memory_limit = 256M # 限制单个 PHP 进程的内存占用
次に、PHP プロセスを再起動します。
sudo systemctl restart php-fpm
✅効果: PHPプロセスが長時間実行されるのを防ぎ、CPUリソースの無駄を削減します。
4. チェック MySQL クエリが遅い
PHP-FPMは負荷が高く、遅い SQL クエリが原因の可能性があります。
开INV MySQL スロークエリログ、妨げとなっている SQL ステートメントを見つけます。
MySQL 構成ファイルを編集します。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
追加:
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1 # 超过 1 秒的查询会被记录
保存したら、MySQL を再起動します。
sudo systemctl restart mysql
次に mysqldumpslow 遅いクエリを分析します。
mysqldumpslow -s c -t 10 /var/log/mysql-slow.log
✅結果:時間のかかるSQLクエリを特定し、データベースのパフォーマンスを最適化し、間接的にPHPの負荷を軽減します。
5. 制限事項 Memcached リソース使用量
プロセスリストを見ると、 Memcached プロセスの CPU 使用率は 24.8% です。
キャッシュ割り当てが大きすぎるために、CPU が大量のデータを処理している可能性があります。
调整 memcached 構成:
sudo nano /etc/memcached.conf
修正:
-m 32 # 限制 Memcached 内存使用 32MB
次に再起動します。
sudo systemctl restart memcached
✅効果: MemcachedプロセスのCPU負荷を軽減し、キャッシュ効率を向上させます。
6. Nginxを有効にして静的リソースをキャッシュする
多くの場合、PHPは大量の CSS、JS、画像ただし、これらのファイルでは PHP 解析はまったく必要ありません。
解決策は?静的リソースをキャッシュするには Nginx を使用してください。
Nginx 設定を編集します。
sudo nano /etc/nginx/nginx.conf
追加:
location ~* \.(jpg|jpeg|png|gif|css|js|ico|xml)$ {
expires max;
log_not_found off;
}
保存したら、Nginx を再起動します。
sudo systemctl restart nginx
✅結果:PHPが静的ファイルを処理する回数を減らし、 CPU使用率を下げます。
7. CPUを最も多く使用するPHPスクリプトを見つける
最適化後も CPU 使用率が高すぎる場合は、一部の PHP スクリプトが乱暴に実行されている可能性があります。
次のコマンドを使用して、CPU 使用率が最も高い PHP プロセスを見つけます。
ps -eo pid,user,pcpu,pmem,args --sort=-pcpu | grep php
PHP スクリプトが CPU を大量に消費していることがわかった場合は、それを直接強制終了することができます。
kill -9 PID
✅結果:問題のあるプロセスを正確に特定し、PHPプロセスがCPUを長時間占有するのを防ぎます。
要約: PHP-FPM を最適化する 7 つの方法
✅ PHP-FPMプロセスの数を制限するCPUの過負荷を防ぐため
✅ OPCacheを有効にするPHPコードの繰り返し解析を削減
✅ PHPタイムアウトの設定長期運用を防ぐため
✅ MySQL の遅いクエリを確認する、データベースクエリのパフォーマンスを最適化します
✅ Memcached メモリを調整するCPUの負担を軽減
✅ Nginx 静的キャッシュを有効にするPHPの解析負荷を軽減
✅ CPU使用率の高いPHPスクリプトを見つける、正確な最適化
结论
サーバーの最適化はフィットネスのようなもので、正確な調整を行う必要があり、いじらないでください。
一連の最適化を行った結果、サーバーのCPU負荷は 80%から15%に減少、ウェブサイトの起動速度が 2 倍になります。
サーバーに同様の問題がある場合は、これらの方法を試してください。 💪
👉今すぐ行動を!PHP-FPMを最適化してサーバーを保護しましょう! 🚀
Chen Weiliang氏のブログ(https://www.chenweiliang.com/ )に掲載されている記事「HestiaCPのphp-fpmプロセスが多くのCPUリソースを消費するが、どのように最適化すればよいか?」が、皆様のお役に立てば幸いです。
この記事のリンクはご自由に共有してください:https://www.chenweiliang.com/cwl-32490.html
