PHP-FPM (FastCGI Process Manager); PHP’nin resmi olarak sunduğu, yüksek trafikli uygulamalar için geliştirilmiş process yöneticisidir. Nginx + PHP-FPM ikilisi, modern LAMP/LEMP yığınının de facto standardıdır: WordPress, Laravel, Magento, Nextcloud ve bunlar gibi PHP tabanlı tüm kurumsal uygulamalar bu kombinasyonla çalışır.
PHP-FPM’in en güçlü özelliği pool modelidir: tek sunucuda farklı uygulamalar (veya farklı müşteriler) için ayrı worker havuzları, ayrı kullanıcılar ve ayrı kaynak limitleri tanımlanabilir. Bir uygulamanın bellek sızıntısı diğerini etkilemez.
Mono’nun yaklaşımı
- PHP sürümü: PHP 8.2 veya 8.3 (güncel stable); eski projelerde PHP 7.4 ayrı pool ile izole.
- pm modu:
dynamic-pm.min_spare_servers,pm.max_spare_servers,pm.max_childrenyük testine göre kalibre. - OPcache: Her zaman etkin;
validate_timestamps=0production’da, deploy hook’undaopcache_reset(). - Slow log:
request_slowlog_timeout = 5s; yavaş endpoint tespiti için/var/log/php-fpm/slow.log. - Güvenlik:
cgi.fix_pathinfo=0; her pool kendi sistem kullanıcısıyla çalışır (www-datayerine uygulama-spesifik). - Unix socket: TCP port yerine Unix socket (
/run/php/phpX.Y-fpm.sock) - loopback overhead’ı sıfır.
Tipik Nginx + PHP-FPM yapılandırması
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 60;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
Yaygın sorunlar ve çözümler
- 502 Bad Gateway: PHP-FPM servisi düşmüş ya da socket yolu yanlış.
systemctl status php8.3-fpmve socket yolunu doğrula. - “max_children reached” uyarısı:
pm.max_childrenyetersiz veya bir request sızdırıyor. Slow log ile uzun süren request’i bul;max_childrenartırmadan önce nedeni çöz. - Bellek tükenmesi: OPcache
memory_consumptionyetersiz (opcache.memory_exhaustedistatistiklerde görünür) veya process başına bellek fazla.pm.max_requestsile periyodik worker yenileme yap. - Yavaş uygulama (PHP tarafı değil):
fastcgi_read_timeoutçok düşük; backend DB sorgusu uzun. Slow log ile ayırt et. - Session çakışması çok-pool ortamında: Her pool için ayrı
session.save_pathtanımla.
İlgili hizmetlerimiz
Sıkça sorulan sorular
mod_php ile PHP-FPM farkı nedir?
pm.max_children nasıl hesaplanır?
(Kullanılabilir RAM) / (Ortalama PHP process RAM). Örneğin 8 GB RAM’den 2 GB OS/diğer servislere ayrıldıktan sonra 6 GB kalıyor; ortalama PHP process 64 MB ise max_children = 6144 / 64 = ~96. Ortalama process RAM’i ps --no-headers -o rss -C php-fpm ile ölçülür. Mono bu değeri deployment öncesi yük testinde kalibre eder.pm modu olarak ne seçmeliyiz?
dynamic çoğu production için dengeli seçim - min/max arasında talebe göre fork. static yüksek ve sabit trafikte fork overhead’ını sıfırlar. ondemand düşük trafikli / çok kiracılı sunucularda bellek tasarrufu sağlar ama cold-start gecikme yaratır. Mono production’da genellikle dynamic kullanır.OPcache ile PHP-FPM birlikte nasıl çalışır?
opcache.memory_consumption=256, opcache.max_accelerated_files=20000, opcache.validate_timestamps=0 (production’da; deploy sırasında opcache_reset()).
