Plesk’te Domainlerde PHP-FPM Yönetimi Nasıl Yapılır?

Tek bir sunucuda birden fazla web site barınıyorsa, her sitenin PHP yükü doğal olarak değişiklik gösterir. Ziyaretçi sayısı yüksek olan siteler daha fazla worker’a ihtiyaç duyarken, basit bir tanıtım sitesi düşük kaynakla da stabil çalışabilir. PHP-FPM her domain için ayrı bir havuz oluşturduğundan, bu limitlerin domain özelinde düzenlenmesi performansı doğrudan etkiler.
Aynı sunucu üzerinde trafik farkı büyük olan pek çok site olabilir. Bir e-ticaret sitesi her saniye çok sayıda isteği karşılar, bir blog ise daha düşük yoğunlukta işlem yapar. Bu sitelere aynı pm.max_children ya da memory limitleri verildiğinde kimisi gereksiz RAM harcar, kimisi ise yük altında 503 ve 504 hatalarıyla karşılaşabilir.

Plesk Üzerinden PHP-FPM Ayarlarını Kontrol Etme

Ayarlara geçmeden önce ilgili domainin PHP-FPM modunda çalıştığını kontrol edelim. Bu kontrol için Plesk panelinden Tools & Settings → PHP Settings kısmına girerek etkin PHP handler türünü görebilirsiniz. Ardından düzenleme yapacağınız domaini açalım.

Domains → Domain → PHP Settings yolunu izleyelim. Eğer Run PHP as bölümü FPM olarak görünmüyorsa modu FPM application served by Apache/Nginx olarak değiştirelim; bu işlem domain için FPM havuzunu etkinleştirir.

Aktif PHP-FPM servislerini listeleyelim

systemctl | grep fpm

Plesk üzerindeki FPM havuzlarını doğrulayalım

plesk bin php_handler --list | grep fpm

Belirli bir PHP-FPM servisinin durumunu kontrol edelim

systemctl status plesk-php80-fpm.service

Alan Adına Özel PHP-FPM Kaynak Limitleri

Domain için PHP-FPM ayarlarının yer aldığı kısımda ihtiyacımız olan tüm parametreler görünür.

Plesk’te Domain Bazlı Kaynak Limitlerini Yapılandıralım

FPM ayarlarının bulunduğu alt bölüme geçelim. Burada “pm” modunu seçelim. Dynamic veya ondemand arasında seçim yaparak siteye uygun bir yapı belirleyebiliriz. Daha sonra pm.max_children değerini sitenin ihtiyacına göre düzenleyelim.

Dynamic mod seçiliyse start_servers, min_spare_servers ve max_spare_servers değerlerini de trafiğe uygun şekilde güncelleyebiliriz.

PHP’nin domain bazlı sınırları olan memory_limit, max_execution_time ve max_input_time değerlerini düzenledikten sonra ayarları kaydedelim.

Bazı Plesk sürümlerinde değişiklikler anında aktif olur. Bazı durumlarda ilgili PHP-FPM servisinin yeniden yüklenmesi gerekebilir. Bu işlem SSH üzerinden yapılabilir. XX yerine site için kullanılan PHP sürümü yazılır.

service plesk-phpXX-fpm restart

İzleme ve Hata Ayıklama

Yapılandırmanın doğru çalışıp çalışmadığını anlamak için ilgili domainin log dosyalarını inceleyelim.

/var/www/vhosts/system/domain/logs/

FPM’e bağlı hataları izlemek için PHP sürümüne göre log dizinini kontrol edelim.

/var/log/plesk-phpXX-fpm/

Sunucu Log Mesajlarının Anlamları

Loglarda görülen bazı mesajlar mevcut ayarların yetersiz veya gereğinden fazla olduğunu gösterebilir:

  • 503 Service Unavailable
    PHP-FPM taleplere zamanında cevap veremiyor olabilir.
Error 503 Service Unavailable Hatası ve Çözümü – Yazılım Mimarileri ve  Tasarım Desenleri Üzerine
  • upstream closed connection
    PHP süreçleri bağlantıyı zamanında tamamlayamıyor; yetersiz worker olabilir.
  • server reached pm.max_children
    Mevcut süreç sayısı maksimuma ulaşmış; pm.max_children düşük kalmış olabilir.

Sık Sorulan Sorular

503 hataları hep belli dakikalarda çıkıyorsa nedeni ne olabilir?

Bu durum çoğunlukla cron görevleri, yedekleme işlemleri veya belirli aralıklarla çalışan API istekleri gibi periyodik yük artışlarından kaynaklanır. Bu yoğunluk sırasında pm.max_children sınırı dolduğu için 503 hatası görünür.

<code>server reached pm.max_children setting</code>

Bu durumda o domaine ait max_children değerini biraz yükseltmek veya cron zamanlamasını farklı bir saate taşımak genelde çözüm sağlar.

Nginx reverse proxy kullanan sitelerde FPM limitleri neden daha önemli?

pm.max_children değeri yetersiz kaldığında PHP tarafı bloklanır ve Nginx tarafında upstream hatası oluşur.

<code>upstream prematurely closed connection while reading response header</code>

Bu hatayı aldığınızda önce domainin PHP-FPM limitlerini, ardından Nginx’in timeout ayarlarını kontrol etmek gerekir.

PHP-FPM havuzunun domain bazında açılmadığını nasıl kontrol ederim?

/etc/php-fpm.d/ veya /opt/plesk/php/*/etc/php-fpm.d/ dizinlerinde ilgili domaine ait bir .conf dosyasının oluşup oluşmadığını kontrol ederek FPM havuzunun gerçekten aktif olup olmadığını anlayabilirsiniz.

Yorum yapın