Makale Rehberi
- 1 PHP-FPM'nin aşırı yüklenmesinin temel nedeni
- 2 PHP-FPM işlem havuzu optimizasyonu (çekirdek parametre ayarlaması)
- 3 İlerlemeyi her an takip edebilmek için PHP-FPM durum izlemeyi etkinleştirin
- 4 Sorunları hızla gidermek için PHP-FPM günlüklerini optimize edin
- 5 Bellek sızıntılarını önlemek için PHP-FPM'yi düzenli olarak yeniden başlatın
- 6 Peki ya sorun devam ederse? Daha fazla optimizasyon!
- 7 Özet: PHP-FPM'i optimize edin ve web siteniz artık çökmesin!
Siz hiç böyle bir durumla karşılaştınız mı?Web sitesi erişimi aniden yavaşladı, hatta 500 hatasıyla sonuçlandı. PHP-FPM'yi yeniden başlattıktan sonra normale döndü.ama bir süre sonra sorun tekrar ortaya çıkıyor? Bu çok sinir bozucu!
Bu neden oluyor?Aslında bu genelliklePHP-FPM işlem havuzu düzgün yapılandırılmamış veya sunucu kaynakları yetersiz.Nedeniyle. Bugün, kapsamlı bir şekilde optimize edeceğiz HestiaCP PHP-FPM, web sitenizi kaya gibi sağlam hale getiriyor!
PHP-FPM'nin aşırı yüklenmesinin temel nedeni
PHP-FPM birSüreç YöneticisiDinamik isteklerin işlenmesinden sorumlu olan . Yapılandırma makul olmazsa şunlara yol açabilir:
- Sunucu kaynakları tükendi, PHP-FPM'nin yeni isteklere zamanında yanıt verememesine neden oluyor;
- Çok az işlem, trafik aniden arttığında, zamanında işlenememektedir;
- İşlem kullanımı çok yüksekCPU yükünün patlamasına neden olur.

PHP-FPM'nin aşırı yüklendiğini nasıl anlarım?
kullanabilirsiniz top 或 htop CPU ve bellek kullanımını görüntüleme komutu:
top -c
Aşağıdakine benzer işlem bilgileri görüyorsanız, PHP-FPM'nin yüksek yük altında çalıştığı anlamına gelir:
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
Bu işlemlerin CPU'nun %70'inden fazlasını nasıl kullandığını görüyor musunuz? Bu durum sıklıkla yaşanıyorsa, PHP-FPM'niz Bir sorun olmalı!
Peki sunucunun aşırı yüklenmesini önlemek için PHP-FPM yapılandırmasını nasıl optimize edebiliriz?
PHP-FPM işlem havuzu optimizasyonu (çekirdek parametre ayarlaması)
İlk olarak aç php-fpm Yapılandırma Dosyaları:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *PHP sürümünüzü (örneğin PHP8.3) değiştirin ve şununla değiştirin:
/etc/php/8.3/fpm/pool.d/www.conf
HestiaCP tarafından ayarlanan PHP sürümünü sorgulayın
v-list-web-domain user domain.com
Örneğin:
v-list-web-domain abc chenweiliang.com
Çıktıda aşağıdakine benzer bir şey göreceksiniz:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
Bu, web sitesinin kullandığı anlamına gelir PHP 8.3.
PHP-FPM yapılandırmanıza bir göz atalım:
[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
Görebilirsin ki senin pm Kullanılan ondemand,Boş zamanlarda kaynak kullanımını azaltabilmesine rağmen, trafiğin aniden artması durumunda, işlem zamanında cevap veremeyebilir., 500 hatasıyla sonuçlanır.
1. PHP-FPM işlem havuzu parametrelerini ayarlayın
Yapılandırma şunu kullanıyorsa dynamicBu, bazı iş süreçlerini önceden başlatıp, talep hacmine göre dinamik olarak ayarlamayı sağlayan, böylece talep hacmi aniden arttığında daha hızlı yanıt verebilen bir yöntemdir.
Belirli miktarda trafiğe sahip web siteleri için kullanılması önerilir pm = dynamicÇünkü yüksek eşzamanlılık sırasında belirli miktarda boşta işlem tutabilir ve 500 hatadan kaçınabilir.
Sadece erişim hacmi çok düşük olduğunda ve bellek kaynakları kısıtlı olduğunda kullanılması önerilir. pm = ondemand Kaynakları korumak için.
Önerilen ondemandve optimize edin pm.max_children Ve diğer parametreler:
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 后自动退出
Neden bunu böyle değiştirmek istiyorsun?
pm = dynamic:İsteğe bağlı olarak oluşabilecek beklemeleri önlemek için süreçleri daha esnek bir şekilde tahsis edin;pm.max_children = 16: Çok az sayıda işlemden kaynaklanan 500 hatayı önleyin;pm.start_servers = 5: Yavaş işlem başlatmayı önleyin;pm.max_requests = 3000:Bellek sızıntılarını önleme, süreci düzenli olarak geri dönüştürün.
2. Uzun süreli meşguliyeti önlemek için PHP betiklerinin yürütme süresini sınırlayın
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
Bu bazı şeyleri önleyebilirÇok fazla CPU kullanan PHP betikleri sunucunuzun çökmesine neden olabilir.
Kaydettikten sonra PHP işlemini yeniden başlatın:
sudo systemctl restart php8.3-fpmİlerlemeyi her an takip edebilmek için PHP-FPM durum izlemeyi etkinleştirin
PHP-FPM işlem izlemeyi etkinleştirin ve istediğiniz zaman görüntüleyinMevcut etkin işlem sayısı ve istek bekleme durumu, sunucunun aşırı yüklenmesini önlemek için.
在 php-fpm.conf Eklendi:
pm.status_path = /status
Daha sonra Nginx yapılandırması:
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;
}
Bu şekilde yapabilirsiniz http://yourdomain.com/status PHP-FPM'i çalışırken görün!
Sorunları hızla gidermek için PHP-FPM günlüklerini optimize edin
在 php-fpm.conf Cevap:
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 的脚本记录到日志
Bu şekilde 500 hatası oluştuğunda doğrudan log'u görüntüleyebilirsiniz:
tail -f /var/log/php-fpm/error.log
PHP'nin aşağıdaki gibi bir hata bildirip bildirmediğine bakın: out of memory,script execution timeout 等.
Bellek sızıntılarını önlemek için PHP-FPM'yi düzenli olarak yeniden başlatın
geçebilir cron Uzun süre çalışan işlemlerin neden olabileceği hataları önlemek için PHP-FPM'yi düzenli olarak yeniden başlatın.Bellek Sızıntıları.
crontab -e
PHP-FPM'yi her gün sabah 3'te otomatik olarak yeniden başlatmak için aşağıdaki zamanlanmış görevi ekleyin:
0 3 * * * /usr/sbin/service php8.3-fpm restart
Peki ya sorun devam ederse? Daha fazla optimizasyon!
Yukarıdaki optimizasyonu hala takip ediyorsanızBazen 500 hatası meydana gelir, aşağıdaki optimizasyonlarla devam edebilirsiniz:
1. PHP yürütme verimliliğini artırmak için OPcache'i etkinleştirin
OPcache henüz etkinleştirilmemişse, bunu şu şekilde kurabilirsiniz (örnek olarak Ubuntu'yu kullanarak):
sudo apt install php8.3-opcache -y
Daha sonra düzenle php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
Etki? PHP sayfa yürütme hızı büyük ölçüde iyileştirildi!
2. Nginx yapılandırma optimizasyonu
Nginx ile ilgili parametrelerin makul olduğundan emin olun, örneğin: fastcgi_read_timeout Uzun yürütme süresi nedeniyle PHP betiklerinin Nginx tarafından sonlandırılmasını önlemek için bunu uygun şekilde ayarlayın:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Özet: PHP-FPM'i optimize edin ve web siteniz artık çökmesin!
Bu optimizasyondan sonra hangi ayarlamaları yaptık?
✅ PHP-FPM işlem havuzunun optimize edilmesi, kullan ondemandVe optimize et pm.max_children parametre;
✅ PHP betiklerinin yürütme süresini sınırlama, uzun vadede CPU işgalini önlemek için;
✅ PHP-FPM izlemeyi etkinleştir, süreç yükünü gerçek zamanlı olarak görüntüleyin;
✅ PHP-FPM günlüklerini optimize etme, 500 hatayı hızla giderin;
✅ PHP-FPM'yi düzenli olarak yeniden başlatın, bellek sızıntılarını önleyin;
✅ OPcache'i etkinleştir, PHP yürütme verimliliğini artırın;
✅ Nginx Yapılandırmasını Optimize Etme, zaman aşımı sorunlarını önlemek için.
Bu optimizasyondan sonra PHP-FPM yükü büyük ölçüde azalacak ve web sitesinin işleyişi daha kararlı hale gelecektir! 🔥
Hemen deneyin! 💪🚀
Umut Chen Weiliang Blogu ( https://www.chenweiliang.com/ ) "HestiaCP PHP-FPM yükü çok yüksek?" paylaşımı yapıldı. Dinamik web sayfası 500 hatası mı? Bu optimizasyon hemen etkili olacaktır! ”, sizin için faydalı olabilir.
Bu makalenin bağlantısını paylaşmaya hoş geldiniz:https://www.chenweiliang.com/cwl-32512.html
Daha fazla gizli numarayı keşfetmek için🔑 Telegram kanalımıza katılmaya hoş geldiniz!
Beğendiyseniz paylaşın ve beğenin! Paylaşımlarınız ve beğenileriniz bizim sürekli motivasyonumuzdur!