ERETEK
BİLGİ SİSTEMLERİ

PHP-FPM ve MariaDB Performans Sorunları

PHP-FPM süreç yönetimi, OPcache ve MariaDB InnoDB ayarlarıyla yavaşlık ve 502/504 hatalarının teşhisi; ölçüm, hesaplama ve kontrol adımları.

Bu makalede7 bölüm
Teknik özet
Teknoloji
PHP-FPM, OPcache, MariaDB InnoDB
Konu
Sunucu performansı
Seviye
İleri

PHP tabanlı sitelerde (WordPress, WooCommerce, Laravel) yavaşlık ve 502/504 hatalarının büyük kısmı iki noktada düğümlenir: PHP-FPM süreç yönetimi ve veritabanı. Bu rehber sorunları teşhis etmek için hangi verilere bakılacağını, temel ayarların nasıl hesaplanacağını ve değişikliklerin nasıl doğrulanacağını anlatır. Ayarlar sunucu kaynaklarına ve iş yüküne göre belirlenmelidir; internetten kopyalanan “ideal değerler” çoğu zaman sorunu büyütür.

1. Önce ölçün

  • PHP-FPM durum sayfası (pm.status_path): aktif süreç, kuyrukta bekleyen istek ve max children reached sayısı.
  • PHP-FPM yavaş log (request_slowlog_timeout): belirli sürenin üzerindeki isteklerin yığın izi; hangi eklenti veya fonksiyonun yavaş olduğunu gösterir.
  • Web sunucusu logları: yanıt süresi ve upstream süresi alanları eklenmiş log formatı.
  • MariaDB yavaş sorgu logu: long_query_time eşiğinin üzerindeki sorgular.
  • Sistem kaynakları: bellek (swap kullanımı), CPU bekleme (iowait), disk gecikmesi.

2. PHP-FPM süreç sayısını hesaplayın

pm.max_children aynı anda çalışabilecek en fazla PHP sürecidir. Çok düşükse istekler kuyrukta bekler (504), çok yüksekse bellek tükenir ve sunucu swap’e düşer. Basit hesap:

max_children ≈ (PHP için ayrılabilecek bellek) ÷ (bir PHP sürecinin ortalama bellek kullanımı)

Örneğin 8 GB RAM’li bir sunucuda işletim sistemi, MariaDB ve diğer servislere 4 GB ayrıldıysa ve bir WordPress süreci ortalama 80 MB kullanıyorsa, yaklaşık 4096 ÷ 80 ≈ 50 süreç üst sınır olarak düşünülebilir. Ortalama süreç belleği gerçek trafikte ölçülmelidir. Çok siteli sunucularda her havuz için ayrı sınır ve toplamın belleği aşmaması gerekir.

Ayar Görevi Not
pm static / dynamic / ondemand Trafik profiline göre
pm.max_children Üst süreç sınırı Bellek hesabıyla
pm.max_requests Süreç kaç istekten sonra yenilenir Bellek sızıntılarına karşı
request_terminate_timeout Uzun isteği sonlandırma Web sunucusu zaman aşımıyla uyumlu

3. OPcache

OPcache derlenmiş PHP kodunu paylaşılan bellekte tutar. Bellek (opcache.memory_consumption) veya dosya sayısı sınırı (opcache.max_accelerated_files) küçükse önbellek dolar ve kod sürekli yeniden derlenir. OPcache durum bilgisinde isabet oranı ve “cache full” durumu kontrol edilmelidir. Üretimde opcache.validate_timestamps ayarı dağıtım sürecine göre belirlenir: kapatılırsa her dağıtımda OPcache sıfırlanmalıdır.

4. MariaDB: bellek ve sorgular

  • innodb_buffer_pool_size: Sık kullanılan veri ve indekslerin bellekte tutulduğu alan. Buffer pool isabet oranı düşükse ve disk okuması yüksekse artırılması gerekir.
  • innodb_log_file_size: Yazma yoğun iş yüklerinde çok küçük log dosyası sık checkpoint’e neden olur.
  • max_connections: PHP süreç sayısıyla uyumlu olmalıdır; sınırsız artırmak bellek riskini büyütür.
  • Yavaş sorgular: EXPLAIN ile tam tablo taraması yapan sorgular bulunur, uygun indeks eklenir veya sorgu yeniden yazılır.

5. WordPress’e özgü sık nedenler

  • wp_options tablosunda otomatik yüklenen (autoload) büyük veriler: her istekte belleğe alınır. Toplam autoload boyutu kontrol edilmeli, gereksizler kapatılmalıdır.
  • İndekssiz postmeta sorguları yapan eklentiler (özellikle filtreleme ve raporlama).
  • Süresi dolmuş transient’ler ve oturum kayıtları.
  • Her istekte dış API çağrısı yapan eklentiler; 504’ün sık nedeni.
  • WP-Cron’un ziyaretçi istekleriyle tetiklenmesi; sistem cron’una taşınması önerilir.

6. Değişikliği doğrulayın

Her ayar değişikliği tek tek yapılmalı ve aynı ölçümlerle karşılaştırılmalıdır: ortalama ve 95. yüzdelik yanıt süresi, max children reached sayısı, yavaş sorgu sayısı, bellek ve swap. Değişikliklerden önce yapılandırma yedeği alınmalıdır.

Sık sorulan sorular

pm = dynamic mi ondemand mı?

Sürekli trafik alan sitelerde dynamic veya static, düşük trafikli ve çok sayıda sitenin bulunduğu hosting sunucularında ondemand bellek tasarrufu sağlar. Seçim, site sayısı ve trafik profiline göre yapılır.

innodb_buffer_pool_size ne kadar olmalı?

Yalnızca veritabanı çalışan bir sunucuda RAM’in büyük kısmı ayrılabilir; web ve veritabanının aynı sunucuda olduğu çoğu kurumsal kurulumda, PHP-FPM ve işletim sistemi için yer bırakılarak veri ve indeks boyutuna göre belirlenir. Sabit bir yüzde yerine ölçümle karar verilmelidir.

502 ve 504 hatası arasındaki fark nedir?

502 genellikle web sunucusunun PHP-FPM’e bağlanamadığını veya sürecin çöktüğünü, 504 ise yanıtın zaman aşımı süresinde gelmediğini gösterir. İlki çoğunlukla süreç sınırı veya bellek, ikincisi yavaş sorgu veya dış servis kaynaklıdır.

Önbellek katmanları için Cloudflare, WP Rocket ve Redis rehberine, uygulama için veritabanı performans optimizasyonu ve Linux VPS ve Virtualmin yönetimi hizmetlerimize bakabilirsiniz.

Teknik özet
Teknoloji
PHP-FPM, OPcache, MariaDB InnoDB
Konu
Sunucu performansı
Seviye
İleri
Eretek uzman desteği

Bu konuyu projeniz için birlikte değerlendirelim.

Mevcut yapınızı inceleyip ihtiyacınıza uygun, sürdürülebilir bir çözüm planı öneriyoruz.