Bu makalede7 bölüm
- 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 vemax children reachedsayı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_timeeş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:
EXPLAINile tam tablo taraması yapan sorgular bulunur, uygun indeks eklenir veya sorgu yeniden yazılır.
5. WordPress’e özgü sık nedenler
wp_optionstablosunda 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
postmetasorguları 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.
- Teknoloji
- PHP-FPM, OPcache, MariaDB InnoDB
- Konu
- Sunucu performansı
- Seviye
- İleri
Web Sunucuları ve DevOps
- MySQL, MariaDB ve PostgreSQL OptimizasyonuYavaş sorgu analizi, EXPLAIN ile sorgu planı, indeks tasarımı, InnoDB ve PostgreSQL ayarları ve bağlantı yönetimiyle veritabanı darboğazlarını…
- Linux VPS, Virtualmin ve Hosting YönetimiUbuntu/Debian sunucularda Virtualmin ile çok siteli hosting: PHP-FPM havuzları, MariaDB, e-posta teslimatı (SPF/DKIM), yedekleme, güvenlik ve izleme.
- Apache HTTP Server Kurulum ve OptimizasyonApache için VirtualHost, MPM event + PHP-FPM, mod_rewrite ve .htaccess kuralları, TLS, mod_proxy, güvenlik başlıkları, loglama ve performans…