WordPress, WooCommerce, Laravel ve özel PHP uygulamaları için sunucu RAM sınırlarına göre pm = dynamic veya ondemand süreç havuzunu yapılandırın; Linux OOM Killer'ın MySQL'i durdurmasını ve aşırı yük altında 502/504 hatalarını engelleyin.
Dynamic modu boşta daha az worker tutar, trafik arttıkça max_children tavanına kadar ölçeklenir. Veritabanı ile aynı sunucuyu paylaşan VPS'ler için bellek israfını önleyen en dengeli moddur.
Linux sunucularda PHP-FPM'in varsayılan pm.max_children = 5 değeri, 20 eşzamanlı istek geldiğinde derhal kilitlenir ve Nginx 502 Bad Gateway hatası üretir. Aksi senaryoda bu değeri 100'e yükseltmek, her biri 90 MB tüketen WooCommerce süreçlerinin 9 GB RAM tüketmesine ve Linux OOM Killer'ın MySQL veritabanını öldürmesine yol açar. Ayrıca pm.max_requests = 1000 direktifi, PHP kodlarındaki bellek sızıntılarını (memory leak) otomatik olarak geri dönüştürür.
Aynı anda çökmeksizin çalışabilecek maksimum PHP alt süreci
WordPress ortalama bellek ayak izi
MySQL ve OS payı ayrıldıktan sonraki RAM
Ortalama 200ms dinamik sayfa oluşturma süresiyle kaldırılan yük
; /etc/php/<surum>/fpm/pool.d/www.conf ; 2026 PHP-FPM Yüksek Performanslı ve OOM Korumalı Havuz Yapılandırması [www] user = www-data group = www-data listen = /run/php/php-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660 ; Süreç Yöneticisi Politikası pm = dynamic pm.max_children = 34 pm.start_servers = 9 pm.min_spare_servers = 5 pm.max_spare_servers = 17 ; Bellek Sızıntısı (Memory Leak) Koruması pm.max_requests = 1000 ; Durum ve Teşhis Sayfası (Nginx üzerinden yerel erişim) pm.status_path = /status ping.path = /ping ping.response = pong ; Zaman Aşımı ve Yavaş Sorgu İnceleme (Slowlog) request_terminate_timeout = 60s request_slowlog_timeout = 5s slowlog = /var/log/php-fpm/www-slow.log ; Sistem Kaynak Limitleri rlimit_files = 65535 rlimit_core = 0 catch_workers_output = yes decorate_workers_output = no
Linux tabanlı web sunucularında en sık yaşanan kesintilerin başında, kontrolsüz artan PHP-FPM süreçlerinin sistem belleğini tüketerek çekirdeğin Linux OOM (Out Of Memory) Killer mekanizmasını tetiklemesi gelir. OOM Killer genellikle en çok bellek tüketen süreci yani MySQL/MariaDB servisini aniden sonlandırır ve siteler "Error establishing a database connection" hatasıyla çöker.
Standart varsayılan ayarlar (örneğin pm.max_children = 5) güçlü bir sunucuyu atıl bırakırken, rasgele yazılmış yüksek değerler (örneğin 100) trafik anında 15-20 GB RAM tüketip sunucuyu kilitleyebilir. Doğru formül; toplam sistem belleğinden işletim sistemi ve veritabanı payı ayrıldıktan sonra kalan net RAM'in, ortalama tek bir PHP sürecinin bellek tüketimine bölünmesidir:
pm.max_children = (Toplam RAM - OS/DB Rezervi) / Ortalama PHP Süreç Boyutu
PHP dillerinde üçüncü taraf eklentiler veya kötü yazılmış kodlar nedeniyle her istek sonrası az miktarda bellek sızıntısı (memory leak) birikebilir. Varsayılan olarak pm.max_requests = 0olduğunda bir süreç sonsuza dek yaşar ve RAM tüketimi katlanarak artar. Bu parametreyi 500 veya 1000olarak tanımlamak, belirlenen istek adedine ulaşan iş parçacığının çekirdek tarafından temiz bir şekilde yeniden başlatılmasını (graceful recycle) sağlayarak bellek şişmesini tamamen yok eder.