WordPress’te OPcache ve object cache performansı, farklı darboğazları hedefler: OPcache PHP kodunun derlenmiş halini bellekte tutar, object cache ise sık kullanılan WordPress verilerini ve sorgu sonuçlarını tekrar üretmeden saklar. Bu yüzden biri kod yürütme süresini, diğeri veritabanı yükünü azaltır; aynı işi yapmazlar. PHP-FPM ile çalışan bir sitede OPcache çoğu istekte temel hız kazancı sağlar, Redis veya Memcached ile kurulan persistent object cache ise özellikle çok sorgulu sayfalarda, aynı menü ve seçenekleri tekrar tekrar çeken kurulumlarda ve yoğun içerik listelerinde fark yaratır. En doğru karar, iki katmanı ayrı ayrı açıp ölçmek, ardından bellek tüketimi, hata günlüğü ve cache ısınma davranışını izlemektir. Yetersiz bellek, yanlış temizleme sırası ya da uygunsuz backend seçimi kazancı azaltabilir; bu yüzden doğrulama olmadan daha hızlı varsayımı yapmamak gerekir.
WordPress’te OPcache ve object cache performansı hangi katmanda etkiler?
OPcache, PHP dosyalarının her istekte yeniden ayrıştırılmasını ve derlenmesini azaltır. WordPress çekirdeği, tema dosyaları ve eklenti kodları PHP olarak çalıştığı için bu katman, neredeyse tüm isteklerin ilk adımına dokunur. Object cache ise veritabanından çekilen veya WordPress tarafından hesaplanan tekrar kullanılabilir nesneleri saklar. Menüler, seçenekler, yazı meta verileri, taksonomi ilişkileri ve bazı sorgu sonuçları bu kapsama girer. Buradaki kritik ayrım şu: OPcache kodu hızlandırır, object cache veri tekrarını azaltır. Sayfa önbelleği ya da CDN ile aynı şey değildir. Bir WordPress sitesi bazı durumlarda güçlü bir page cache ile zaten hızlı görünebilir; buna rağmen yönetim alanı, API istekleri veya oturuma bağlı sayfalarda object cache ve OPcache farkı hala hissedilir.
| Katman | Ne yapar | En çok fayda gördüğü durum | Sınırı | Nasıl anlaşılır |
|---|---|---|---|---|
| OPcache | PHP kodunun derlenmiş halini saklar | Sık çalışan WordPress kodu, tema ve eklenti çağrıları | Veritabanı sorgularını tek başına azaltmaz | PHP-FPM sonrası ikinci ve sonraki isteklerde CPU ve TTFB düşer |
| Object cache | Tekrar kullanılan WordPress verilerini ve sorgu sonuçlarını saklar | Çok sorgulu arşivler, menüler, seçenekler, yoğun içerik listeleri | Backend gecikmesi veya yanlış bellek ayarı kazanımı siler | DB sorgu sayısı, Redis veya Memcached hit oranı ve CPU kullanımı değişir |
| PHP-FPM | İstekleri işleyen worker süreçleri yönetir | Yük altında aynı anda çok istek alan siteler | Yavaş kodu ya da tıkanmış altyapıyı tek başına çözmez | Worker kuyrukları, yanıt süresi ve reload sonrası davranış incelenir |
Redis ve Memcached ne zaman anlamlı olur?
Redis ve Memcached, WordPress object cache için iki ayrı backend seçeneğidir. Performans farkı çoğu sitede sadece ham hız değil, operasyonel uyum üzerinden okunur. Aynı sunucuda doğru ayarlanmış iki backend de yeterince hızlı olabilir; sorun çoğu zaman seçimin kendisinden çok, ağ gecikmesi, bellek yetersizliği, yanlış flush sırası veya aşırı yüklenmiş servislerdir. Bu yüzden seçim yaparken sadece ‘hangisi daha hızlı’ sorusuna bakmak doğru değildir.
| Kriter | Redis | Memcached | Pratik seçim notu |
|---|---|---|---|
| Yapı | Daha esnek bir in-memory veri servisi | Daha sade, key-value odaklı bir cache | WordPress object cache kullanımında ikisi de çalışabilir; iş yüküne göre karar verilir |
| İşletim | İzleme ve yapılandırma seçenekleri daha geniş olabilir | Daha yalın bir işletim modeli sunar | Takımın bakım alışkanlığı ve host desteği önemli olur |
| Kalıcılık | Konfigürasyona bağlı olarak farklı çalışma biçimleri vardır | Temelde geçici bellek kullanımına dayanır | Object cache için kalıcılıktan çok gecikme ve stabilite önemlidir |
| Risk | Uzak veya yoğun servis, istek süresini uzatabilir | Basit görünse de yanlış boyutlandırma yine sorun çıkarır | Backend aynı ağda ve sağlıklı değilse beklenen kazanç düşer |
Ne zaman kullanılır? Çok tekrar eden veritabanı çağrıları varsa, içerik listeleri ağırsa, admin ve API tarafında da benzer veriler sürekli okunuyorsa persistent object cache anlamlı olur. Ne zaman sınırlı kalır? Trafiği düşük, basit içerikli ve güçlü bir page cache ile çalışan bir sitede ek karmaşıklık, kazançtan fazla olabilir. Uzak Redis örneği, agresif cache temizliği ya da yanlış eklenti seçimi de bu sonucu değiştirebilir.
- Redis, mevcut altyapıda zaten kullanılıyorsa ve izleme tarafı hazırsa mantıklı bir tercih olur.
- Memcached, sade ve geçici cache ihtiyacı olan kurulumlarda yeterli olabilir.
- İki backend de, aslında çözmeye çalıştığınız sorunun page cache mi yoksa object cache mi olduğunu doğru ayırmadığınızda yanlış beklenti üretir.
PHP-FPM neden listenin içinde yer alır?
PHP-FPM, WordPress isteğini hangi worker sürecinin işlediğini belirler. OPcache ortak bellekte dursa da her worker isteği ayrı ayrı yürütür; object cache ise o worker’ın veritabanına ne kadar gideceğini azaltır. Bu yüzden PHP-FPM, cache katmanlarının etkisini görünür kılan platformdur. Worker sayısı yetersizse istekler kuyruklanır, CPU ya da RAM baskısı artarsa cache kazanımı bile gecikmeyi tamamen silemez. Tam tersine, iyi çalışan bir cache katmanı worker başına harcanan süreyi kısaltır ve aynı havuzla daha fazla isteğin işlenmesine yardım eder.
OPcache değişikliği yaptıysanız ya da PHP yapılandırmasını güncellediyseniz, PHP-FPM reload adımı kritik olur. Reload yapılmadan eski ayarlarla ölçüm yaparsanız, yanlış sonuç okuma riski doğar. Bu nedenle cache performansını incelerken PHP-FPM’i altyapının pasif bir arka planı gibi değil, sonuçları etkileyen canlı bir katman gibi değerlendirmek gerekir.
Güvenli uygulama sırası: tek değişkenle ilerle
- Önce staging ortamında ya da düşük riskli bir bakım penceresinde temel ölçümü alın. Aynı URL’yi birkaç kez çağırın ve TTFB, CPU, sorgu sayısı gibi değerleri not edin.
- Önce OPcache durumunu kontrol edin. Kapalıysa bir değişiklik olarak yalnız onu açın ve PHP-FPM’i reload edin.
- İkinci testte aynı sayfayı tekrar çağırın. İlk istekle sonraki istekler arasındaki farkı görün.
- Sonra persistent object cache backend’ini ekleyin. Redis veya Memcached seçimi ne olacaksa başka bir değişikliği aynı anda yapmayın.
- Cache’i temizleyin, ardından gerçek ziyaret akışına benzer birkaç istekle ısıtın. Tekrar eden sorguların düşüp düşmediğini kontrol edin.
- Her iki katman açıkken bile sorun varsa, tema, eklenti, dış API çağrısı veya PHP-FPM kuyruğu gibi başka bir darboğazı arayın.
php -i | grep -i 'opcache.enable|opcache.memory_consumption|opcache.validate_timestamps'
redis-cli ping
redis-cli info stats | grep -E 'keyspace_hits|keyspace_misses'
systemctl reload php-fpm
Bu kontrollerde opcache.enable satırının On görünmesi, redis-cli ping komutunun PONG dönmesi ve Redis istatistiklerinde hit sayısının ısınan trafikte artması beklenir. Memcached kullanıyorsanız benzer mantıkla servis istatistiklerine bakın; normal kabul edilen durum, cache katmanı aktifken tekrar eden isteklerde veritabanına daha az gidilmesidir. Eğer ilk istek yavaş, sonraki istekler belirgin biçimde hızlıysa bu çoğu zaman sağlıklı bir warm-up davranışıdır. Buna karşılık ilk istekten sonra da fark yoksa, cache değil başka bir darboğaz konuşuluyordur.
Cache doğrulama: hızlı sayfa mı, ısınmış cache mi?
| Belirti | Muhtemel anlam | Ne yapmalı? |
|---|---|---|
| İlk istek yavaş, sonraki istekler daha hızlı | OPcache veya object cache ısınıyordur | Aynı URL ile warm test yapın, sonuçları cold test ile karıştırmayın |
| DB sorgu sayısı düşüyor ama hız çok değişmiyor | Darboğaz tema kodu, dış servis ya da PHP-FPM olabilir | CPU, disk ve worker kuyruklarına bakın |
| Redis hit oranı artıyor fakat TTFB değişmiyor | Cache çalışıyordur ama etkisi sınırlıdır | Yavaş sorguları, gereksiz eklentileri ve ağır template çağrılarını inceleyin |
| Admin paneli hala ağır | Object cache tarafı yeterli olmayabilir ya da admin akışı farklı davranıyordur | Yönetim tarafı için ayrıca ölçüm alın |
Doğrulamada en sağlıklı yöntem, aynı sayfayı aynı ortamda ve benzer trafik koşullarında tekrar etmektir. Tarayıcı önbelleği, CDN, page cache ve arka plandaki cron işleri sonucu bozabilir. Bu yüzden tek bir hızlı yükleme yerine birkaç tekrar ve servis tarafı istatistiği birlikte okunmalıdır.
Geri dönüş planı
Canlıda sorun çıkarsa her şeyi birden kapatmak yerine tek bir değişikliği geri alın. Persistent object cache eklentisi açıldıktan sonra hata üretirse önce onu devre dışı bırakın ve cache’i temizleyin. Redis veya Memcached backend’ini değiştirdiyseniz, uygulamanın artık o servise bağlı olmadığını doğrulayın. OPcache ayarını ini dosyasında değiştirdiyseniz, eski değere dönün ve PHP-FPM’i yeniden yükleyin. Bu sırada siteyi tekrar ölçün; değişiklikten önceki ve sonraki davranışın aynı olduğundan emin olmadan ikinci bir düzenleme yapmayın.
- Hatanın hangi katmanda başladığını ayırın: OPcache mi, object cache mi, PHP-FPM mi?
- Persistent object cache eklentisini kapatın ve cache’i temizleyin.
- OPcache ayarını eski hale getirin, ardından PHP-FPM reload yapın.
- Yeniden aynı URL’leri test edin ve hata veya gecikme kalıp kalmadığını kontrol edin.
Sık yapılan hatalar
- OPcache ile object cache’i aynı şey sanmak ve yalnız birini açınca her sorunun çözüleceğini düşünmek.
- Redis ya da Memcached’i uzak sunucuda, gecikme ölçmeden kullanmak.
- Canlı trafikte cache temizleyip hemen performans sonucu beklemek; warm-up etkisini hesaba katmamak.
- OPcache değişikliğinden sonra PHP-FPM’i reload etmeden sonuç okumak.
- Tek seferde hem tema, hem eklenti, hem cache backend değiştirmek ve hangi adımın etkili olduğunu kaybetmek.
- Page cache iyi çalışıyor diye object cache ve OPcache etkisini göz ardı etmek.
Canlıya almadan önce kısa kontrol
- Önce baseline ölçüm alındı mı?
- OPcache ve object cache rolleri birbirine karıştırılmadı mı?
- Redis veya Memcached backend’i aynı ağda ve sağlıklı mı?
- PHP-FPM reload sonrası aynı URL tekrar test edildi mi?
- Geri dönüşte kapatılacak tek katman net mi?
Karar notu: Site çok sorgu üretiyorsa ve aynı veriler sık tekrar ediyorsa persistent object cache genelde anlamlıdır; site daha çok PHP kodu çalıştırıyor ama veri tekrarına çok girmiyorsa OPcache daha görünür fayda verir. PHP-FPM ise bu iki katmanın üstünde çalışan istek motorudur, cache değildir. En güvenli seçim, tek tek açıp aynı metriklerle ölçmek ve yalnızca gerçekten etkili olan katmanı canlıda bırakmaktır.
Sık Sorulan Sorular
OPcache ile object cache aynı şey mi?
Hayır, aynı şey değiller. OPcache PHP kodunun derlenmiş halini bellekte tutar; object cache ise WordPress’in sık kullandığı veri ve sorgu sonuçlarını saklar. İlk katman kod yürütmeyi, ikinci katman veritabanı tekrarını azaltır. Bu yüzden ikisini ayrı ayrı ölçmek gerekir.
Redis mi Memcached mi seçmeliyim?
İkisi de WordPress object cache için kullanılabilir; seçim çoğu zaman hızdan çok işletim kolaylığına bağlıdır. Redis, daha geniş kullanım alanı ve izleme seçenekleri isteyen yapılarda sık tercih edilir. Memcached, daha sade ve geçici cache ihtiyacında yeterli olabilir. Backend uzaksa gecikmeyi ayrıca ölçmek gerekir.
PHP-FPM neden bu kadar önemli?
PHP-FPM, WordPress isteğini hangi worker’ın işlediğini belirlediği için cache katmanlarının etkisini doğrudan görünür kılar. OPcache ve object cache worker başına harcanan süreyi düşürür, fakat worker sayısı yetersizse veya kuyruk oluşuyorsa sorun devam edebilir. Cache tek başına PHP-FPM darboğazını çözmez.
Cache’in gerçekten fayda ettiğini nasıl anlarım?
Aynı sayfayı aynı ortamda birkaç kez açıp TTFB, CPU, sorgu sayısı ve backend hit oranını karşılaştırın. OPcache çalışıyorsa ilk istekten sonra sonraki istekler hafifler; object cache çalışıyorsa veritabanı sorguları düşer. Sadece ilk yüklemede hızlanma varsa, ısınma etkisini test ediyorsunuz demektir.
Site cache açınca yavaşladıysa ne yapmalıyım?
Önce persistent object cache katmanını devre dışı bırakıp cache’i temizleyin, sonra OPcache ayarını ve PHP-FPM reload durumunu kontrol edin. Sorun devam ediyorsa backend gecikmesini, bellek baskısını ve tema veya eklenti ağır sorguları inceleyin. Tek seferde bir değişikliği geri almak en güvenli yoldur.
İlk yorumu siz yazın.