sunucuhataları
teknik çözüm merkezi
Ara Giriş Yap Üye Ol
🏠 Ana Sayfa 📚 Kurulum Rehberleri
Kategoriler
🌐 Web Sunucuları 🐧 İşletim Sistemleri 📦 Sanallaştırma & VPS 🖥️ Kontrol Panelleri 🔒 SSL & Güvenlik 📝 CMS & Uygulamalar 🗄️ Veritabanı 📧 Mail Sunucusu 🗨️ Forum ℹ️ Hakkımızda 📧 İletişim
Giriş Yap Üye Ol
Ana Sayfa CMS & Uygulamalar PHP Kurulumu PHP-FPM Pool Ayarları: pm.max_children ve OPcac...
🐘 PHP Kurulumu

PHP-FPM Pool Ayarları: pm.max_children ve OPcache Optimizasyonu

PHP-FPM pm.max_children hesaplama yöntemi, pool modu seçimi ve OPcache yapılandırması ile sunucu performansını artırın.

📅 16 Mart 2025 👁 43 görüntülenme ⏱ 3 dk okuma
𝕏 Paylaş
📋 İçindekiler göster/gizle

PHP-FPM Nedir?

PHP-FPM (FastCGI Process Manager), PHP'nin web sunucularıyla (Nginx, Apache, OpenLiteSpeed) iletişim kurmasını sağlayan bir FastCGI uygulamasıdır. Geleneksel Apache mod_php kurulumundan farklı olarak PHP-FPM, PHP işlemlerini bağımsız bir havuzda (pool) yönetir. Bu yaklaşım birçok avantaj sunar:

  • Her site/domain için ayrı pool ve kullanıcı ile izolasyon
  • Bellek kullanımı üzerinde hassas kontrol
  • Worker sayısını dinamik olarak ayarlama
  • Yavaş istek günlüğü (slow log) ile performans sorunlarını tespit
  • Nginx ile birlikte kullanıldığında çok yüksek eşzamanlılık

max_children Hesabı

PHP-FPM'in en kritik ayarı olan pm.max_children, aynı anda kaç PHP işleminin çalışabileceğini belirler. Bu değeri çok düşük tutarsanız istekler kuyruğa girer; çok yüksek tutarsanız sunucu belleği tükenir ve swap'a düşer.

Hesaplama Formülü

# Mevcut PHP-FPM process başına bellek tüketimini öğrenmek için:
ps --no-headers -o "rss,cmd" -C php-fpm8.3 | awk '{sum+=$1; count++} END {print sum/count/1024 " MB ortalama"}'

# Formül:
# max_children = (Kullanılabilir RAM) / (PHP process başına ortalama bellek)
# Örnek: 2 GB RAM, process başına 50 MB
# max_children = (2048 MB - 512 MB sistem) / 50 MB = ~30

Pratik kural: WordPress siteleri için PHP process başına ortalama 30-60 MB bekleyin. Laravel uygulamaları 50-100 MB arası tüketebilir.


Pool Yönetim Modları

pm = dynamic (Önerilen – Çoğu durum için)

Worker sayısı trafik yüküne göre dinamik olarak artar ve azalır.

pm = dynamic
pm.max_children      = 30
pm.start_servers     = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests      = 500  ; bellek sızıntısını önler

pm = static (Yüksek ve sabit trafik için)

Her zaman sabit sayıda worker çalışır. Tepki süresi tutarlıdır ama boşta bellek tüketir.

pm = static
pm.max_children = 20

pm = ondemand (Düşük trafik / paylaşımlı hosting için)

İstek geldiğinde worker başlatılır; belirli süre boşta kalırsa sonlandırılır. En az bellek tüketen moddur.

pm = ondemand
pm.max_children        = 30
pm.process_idle_timeout = 10s

Pool Yapılandırması: Çok Siteli Kurulum

# /etc/php/8.3/fpm/pool.d/example.conf
[example.com]
user  = www-example
group = www-example

listen = /run/php/php8.3-example.sock
listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children      = 15
pm.start_servers     = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5

; Slow log
slowlog           = /var/log/php-fpm/example-slow.log
request_slowlog_timeout = 5s

; Error log
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php-fpm/example-error.log

OPcache Ayarları

OPcache, PHP betiklerini derlenmiş bytecode olarak bellekte saklar. Böylece her istekte PHP dosyaları yeniden derlenmez; bu, PHP uygulamalarında %50-200 oranında performans artışı sağlar.

# /etc/php/8.3/fpm/conf.d/10-opcache.ini
[opcache]
opcache.enable                 = 1
opcache.memory_consumption     = 256       ; MB cinsinden
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files  = 20000
opcache.revalidate_freq        = 60        ; Üretimde 0 (manuel temizle)
opcache.save_comments          = 1         ; Doctrine gibi ORM için gerekli
opcache.fast_shutdown          = 1
opcache.enable_cli             = 0

OPcache Durumunu Kontrol Etme

Laravel/WordPress'te OPcache Yenileme

# PHP-FPM'i yeniden başlat (OPcache temizler)
systemctl reload php8.3-fpm

# Veya PHP scriptiyle
php -r "opcache_reset();"

Sık Karşılaşılan Sorunlar

  • 502 Bad Gateway: PHP-FPM socket/port yolunu Nginx'te doğru belirttiğinizden emin olun. systemctl status php8.3-fpm ile servis durumunu kontrol edin.
  • Bellek tükeniyor: pm.max_children değerini azaltın veya sunucuya RAM ekleyin.
  • OPcache değişiklik göstermiyor: Geliştirme ortamında opcache.revalidate_freq=0 yerine opcache.validate_timestamps=1 kullanın.
  • Yavaş PHP uygulaması: Slow log'u etkinleştirin ve darboğaz olan fonksiyonları tespit edin.

İlgili Makaleler

🤔 Bu kurulumda sorun mu yaşıyorsunuz?

Hata mesajınızı kopyalayıp foruma konu açın. Topluluğumuz size özel durumunuza göre yardımcı olacaktır.

🗨️ Foruma Katıl & Yardım Al
Etiketler: #nginx #performans #php-fpm #opcache

Yorumlar

Henüz yorum yok. İlk yorumu siz yapın!

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanır.