format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightPHP-FPM Nedir ve Neden Önemlidir?
- arrow_rightPHP-FPM Mimari Temelleri
- arrow_rightProcess Manager (PM) Türleri
- arrow_rightpm.max_children: Kritik Parametre
- arrow_rightTemel PHP-FPM Yapılandırma Parametreleri
- arrow_rightpm.max_requests Ayarları
- arrow_rightrequest_terminate_timeout
- arrow_rightİşlemci Kaynaklarını Verimli Kullanma Stratejileri
- arrow_right1. Emergency Restart Ayarları
- arrow_right2. OPcache Yapılandırması
- arrow_right3. Realpath Cache Optimizasyonu
- arrow_rightSunucu Kaynaklarına Göre PHP-FPM Ayarları
- arrow_rightKüçük Sunucular (1-2 GB RAM)
- arrow_rightOrta Ölçekli Sunucular (4-8 GB RAM)
- arrow_rightYüksek Performanslı Sunucular (16+ GB RAM)
- arrow_rightPerformans İzleme ve Optimizasyon
- arrow_rightPHP-FPM Status Sayfası
- arrow_rightBenchmark Testleri
- arrow_rightYaygın Hatalar ve Çözümleri
- arrow_rightHata 1: Aşırı pm.max_children Değeri
- arrow_rightHata 2: Ondemand Modunda Yavaş İlk İstek
- arrow_rightHata 3: Yetersiz max_requests
- arrow_rightSonuç ve En İyi Uygulamalar
PHP-FPM Nedir ve Neden Önemlidir?
PHP-FPM (FastCGI Process Manager), modern web sunucularının en kritik bileşenlerinden biridir. Apache veya Nginx gibi web sunucuları ile PHP arasında köprü görevi gören PHP-FPM, dinamik içeriklerin işlenmesini sağlar. Web sitesi performansı açısından doğru yapılandırılmış bir PHP-FPM ortamı, sunucu yanıt sürelerini %60'a varan oranlarda iyileştirebilir.
Yanlış PHP-FPM ayarları, aşırı bellek tüketimi, yavaş sayfa yüklemeleri ve sunucu çökmelerine yol açabilir. Özellikle yüksek trafikli projelerde, kaynakların verimli kullanılması hem maliyet hem de performans açısından kritik önem taşır.
PHP-FPM Mimari Temelleri
Process Manager (PM) Türleri
PHP-FPM'de üç farklı process manager tipi bulunur ve her biri farklı kullanım senaryoları için optimize edilmiştir:
| PM Türü | Avantajlar | Dezavantajlar | Ideal Kullanım |
|---|---|---|---|
| static | Öngörülebilir kaynak kullanımı, en yüksek performans | Esneklik eksikliği, düşük trafikte kaynak israfı | Yüksek trafikli, stabil projeler |
| dynamic | Esnek kaynak yönetimi, düşük bellek tüketimi | İlk isteklerde gecikme, karmaşık yapılandırma | Orta seviye trafik, değişken yüklü siteler |
| ondemand | Minimum bellek kullanımı, kaynak tasarrufu | İlk isteklerde yavaşlama, soğuk başlangıç | Düşük trafikli projeler, development ortamları |
pm.max_children: Kritik Parametre
Bu parametre, PHP-FPM'nin aynı anda oluşturabileceği maksimum child process sayısını belirler. Hesaplama formülü şu şekildedir:
pm.max_children = Toplam Bellek / Her bir PHP-FPM prosesinin bellek tüketimi
Ortalama bir PHP-FPM prosesi 30-50 MB bellek tüketir. 4GB RAM'e sahip bir sunucu için önerilen değer:
pm.max_children = 4096 MB / 40 MB ≈ 100
Temel PHP-FPM Yapılandırma Parametreleri
pm.max_requests Ayarları
Her child process'in yeniden başlatılmasından önce işleyeceği maksimum istek sayısını belirler. Bu değer, bellek sızıntılarının önlenmesi için kritiktir:
- Düşük trafikli siteler: 50-100
- Orta trafikli siteler: 200-500
- Yüksek trafikli siteler: 500-1000
Bu parametrenin doğru ayarlanması, uzun süre çalışan processlerde biriken bellek sızıntılarının önüne geçer ve sunucu hatalarının çözümüne katkı sağlar.
request_terminate_timeout
Bir isteğin maksimum yürütülme süresini belirler. Uzun süren scriptlerin sunucuyu bloke etmesini önlemek için kritik bir ayardır:
[www] request_terminate_timeout = 30s request_slowlog_timeout = 10s slowlog = /var/log/php-fpm/slow.log
Bu ayar, özellikle veritabanı sorgularının veya harici API çağrılarının zaman aşımına uğraması durumunda sunucunun responsive kalmasını sağlar.
İşlemci Kaynaklarını Verimli Kullanma Stratejileri
1. Emergency Restart Ayarları
Sunucu aşırı yüklendiğinde otomatik müdahale için emergency restart mekanizmasını yapılandırın:
[www] pm.max_children = 100 pm.start_servers = 20 pm.min_spare_servers = 10 pm.max_spare_servers = 30 pm.max_requests = 500
2. OPcache Yapılandırması
PHP kodunun derlenmiş halini önbelleğe almak, işlemci yükünü önemli ölçüde azaltır:
opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.validate_timestamps=0 ; Production için opcache.revalidate_freq=2
OPcache, aynı PHP dosyalarının her istek için yeniden derlenmesini engelleyerek web sitesi hızını artırır.
3. Realpath Cache Optimizasyonu
Dosya yollarının önbelleğe alınması, I/O işlemlerini azaltır:
realpath_cache_size=4096K realpath_cache_ttl=600
Sunucu Kaynaklarına Göre PHP-FPM Ayarları
Küçük Sunucular (1-2 GB RAM)
[www] pm = ondemand pm.max_children = 20 pm.process_idle_timeout = 10s pm.max_requests = 200
Orta Ölçekli Sunucular (4-8 GB RAM)
[www] pm = dynamic pm.max_children = 50 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20 pm.max_requests = 500
Yüksek Performanslı Sunucular (16+ GB RAM)
[www] pm = static pm.max_children = 150 pm.max_requests = 1000 request_terminate_timeout = 60
Performans İzleme ve Optimizasyon
PHP-FPM Status Sayfası
Performansı izlemek için PHP-FPM status sayfasını etkinleştirin:
[www] pm.status_path = /status ping.path = /ping ping.response = pong
Bu sayfaya erişim için Nginx yapılandırması:
location ~ ^/(status|ping)$ {
access_log off;
allow 127.0.0.1;
allow 10.0.0.0/24;
deny all;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Benchmark Testleri
Yapılandırma değişikliklerini test etmek için Apache Benchmark (ab) veya wrk kullanın:
ab -n 1000 -c 100 http://your-site.com/
Bu komut 1000 isteği 100 eşzamanlı bağlantı ile test eder. Ortalama yanıt süresi 200ms'nin altında olmalıdır.
Yaygın Hatalar ve Çözümleri
Hata 1: Aşırı pm.max_children Değeri
Çok yüksek değerler, sunucunun bellek tüketimini artırır ve swap kullanımına yol açar. Çözüm: Bellek kullanımını izleyerek optimal değeri bulun.
Hata 2: Ondemand Modunda Yavaş İlk İstek
Ondemand modunda idle process bulunmadığından ilk istekte process oluşturulması gerekir. Çözüm: Hosting altyapısı için dynamic modu tercih edin veya start_servers değerini ayarlayın.
Hata 3: Yetersiz max_requests
Düşük değerler, process yeniden başlatma overhead'ını artırır. Yüksek değerler ise bellek sızıntılarına yol açar. Çözüm: Uygulamanızın bellek kullanım profiline göre 200-500 arası değer deneyin.
Güvenlik Yapılandırması
PHP-FPM güvenliğini artırmak için aşağıdaki ayarları uygulayın:
[www] user = nginx group = nginx listen = /var/run/php-fpm/www.sock listen.owner = nginx listen.group = nginx listen.mode = 0660 php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 128M php_admin_value[upload_max_filesize] = 20M php_admin_value[post_max_size] = 25M
Bu yapılandırma, PHP processlerinin yalnızca gerekli kaynaklara erişmesini sağlar ve web uygulama güvenliğine katkıda bulunur.
Sonuç ve En İyi Uygulamalar
PHP-FPM optimizasyonu, web uygulamalarının performansını doğrudan etkileyen kritik bir süreçtir. İşte özet talimatlar:
- Sunucu kaynaklarınızı analiz edin: Toplam RAM ve CPU kapasitesini belirleyin
- PM türünü seçin: Trafik profilinize göre static, dynamic veya ondemand seçin
- pm.max_children hesaplayın: Bellek / proses boyutu formülünü uygulayın
- OPcache'i etkinleştirin: Derleme süresini minimize edin
- İzleme sistemi kurun: Status sayfası ve loglarla performansı takip edin
- Düzenli test yapın: Benchmark testleri ile yapılandırmanın etkinliğini ölçün
Doğru PHP-FPM ayarları, sunucu maliyetlerini düşürürken kullanıcı deneyimini iyileştirir. Unutmayın: her uygulama farklıdır ve en iyi yapılandırma, sürekli izleme ve optimizasyon ile elde edilir.