OPcache Nedir ve Neden Önemlidir?

PHP, her istek geldiğinde kaynak kodunu derleyip çalıştırır. Bu süreç CPU‑ağırlıklıdır ve yüksek trafikli sitelerde yanıt süresini ciddi ölçüde uzatır. OPcache, PHP’nin opcode (derlenmiş kod) çıktısını bellekte tutarak bu derleme adımını ortadan kaldırır. Sonuçta, aynı script ikinci kez çalıştırıldığında doğrudan bellekteki önbellekten yürütülür.
OPcache’in en büyük avantajı, istek başına %30‑50 arasında performans artışı sağlamasıdır. Özellikle VDS sunucu paketleri üzerinde çalışan dinamik siteler, önbellekleme sayesinde CPU kullanımını %40’a kadar azaltabilir. Bu da daha az kaynak tüketimi, daha düşük barındırma maliyeti ve son kullanıcıya daha hızlı bir deneyim demektir.
OPcache aynı zamanda opcode cache hit ratio (önbellek isabet oranı) gibi ölçümlerle uygulama performansını izleme imkanı sunar. Yüksek bir hit ratio, önbelleğin etkili çalıştığını gösterir; düşük bir oran ise konfigürasyon hatası veya çok sık kod değişikliği gibi sorunları işaret eder.
OPcache Nasıl Kurulur ve Aktifleştirilir?
OPcache, PHP 5.5 ve üzeri sürümlerde varsayılan olarak gelir, ancak bazı dağıtımlarda manuel etkinleştirme gerekir. Aşağıdaki adımlar, Ubuntu 22.04 LTS ve CentOS 9 üzerinde OPcache’i kurup aktif hâle getirmenizi sağlar.
- PHP paketlerini güncelleyin:
sudo apt update && sudo apt install php php-opcache(Ubuntu) veyasudo dnf install php php-opcache(CentOS). - php.ini dosyasını düzenleyin:
/etc/php/8.2/cli/php.inive/etc/php/8.2/fpm/php.inidosyalarında aşağıdaki satırların bulunupOnolduğundan emin olun:opcache.enable=1 opcache.enable_cli=1
- Önbellek boyutunu ayarlayın:
opcache.memory_consumption=128(megabayt) çoğu orta ölçekli site için yeterlidir. Daha büyük uygulamalar 256‑512 MB’a çıkarılabilir. - PHP‑FPM servisini yeniden başlatın:
sudo systemctl restart php8.2-fpm(Ubuntu) veyasudo systemctl restart php-fpm(CentOS).
Kurulumdan sonra php -i | grep opcache komutuyla OPcache’in aktif olduğunu doğrulayabilirsiniz. Eğer WordPress hosting planı kullanıyorsanız, OPcache genellikle otomatik olarak etkinleştirilir; yine de phpinfo() ile kontrol etmek faydalıdır.
OPcache Ayarlarını İnce Ayar Yapmak
Varsayılan ayarlar çoğu senaryo için yeterli olsa da, yüksek trafikli projelerde ince ayar büyük fark yaratır. En kritik parametreler şunlardır:
- opcache.max_accelerated_files: Önbelleğe alınabilecek dosya sayısını belirler. 10.000‑20.000 arası bir değer, büyük projeler için uygundur.
- opcache.revalidate_freq: Dosya değişikliklerini ne sıklıkta kontrol edeceğini saniye cinsinden tanımlar. 0 değeri her istekte kontrol eder; 60 ise bir dakikada bir kontrol eder, bu da CPU tasarrufu sağlar.
- opcache.validate_timestamps: Değişiklik kontrolünü etkinleştirir (1) ya da devre dışı bırakır (0). Üretim ortamında 0 yapıp
opcache.reset()ile manuel temizleme tercih edilebilir. - opcache.interned_strings_buffer: İç içe geçmiş stringlerin önbellekte tutulduğu alanı MB cinsinden ayarlar. 8‑16 MB önerilir.
Bu ayarları php.ini dosyasına ekleyerek örnek bir yapılandırma elde edebilirsiniz:
opcache.memory_consumption=256 opcache.max_accelerated_files=20000 opcache.revalidate_freq=30 opcache.validate_timestamps=1 opcache.interned_strings_buffer=16
Ayarlamaları yaptıktan sonra systemctl reload php-fpm ile servisi yeniden yüklemek, değişikliklerin anında geçerli olmasını sağlar.
OPcache Performansını Ölçmek ve İzlemek

OPcache’in etkisini ölçmek için iki temel metrik kullanılır: hit ratio ve memory usage. Bu değerleri PHP’nin opcache_get_status() fonksiyonu ile JSON formatında alabilirsiniz.
Bu scripti düzenli olarak çalıştırıp sonuçları bir monitoring aracına (Grafana, Prometheus vb.) gönderirseniz, zaman içinde performans eğrilerini görebilir ve olası düşüşleri erken fark edebilirsiniz.
Ek olarak, opcache_reset() komutu önbelleği temizler; kod güncellemelerinden sonra bu komutu çalıştırmak, eski opcode’un kalmasını engeller. Otomatikleştirmek için bir CI/CD pipeline’ına php -r "opcache_reset();" ekleyebilirsiniz.
OPcache ve Diğer Önbellek Çözümlerinin Karşılaştırması
OPcache tek başına güçlü bir çözüm olsa da, bazı senaryolarda ek önbellek katmanları (APCu, Redis, Memcached) ile birlikte kullanılabilir. Aşağıdaki tablo, OPcache, APCu ve Redis’in tipik kullanım alanlarını ve avantajlarını özetler.
| Özellik | OPcache | APCu | Redis |
|---|---|---|---|
| Önbellek Türü | Opcode (PHP derlenmiş kod) | Object Cache (PHP değişkenleri) | Key‑Value Store (her türlü veri) |
| Depolama | RAM (süreli) | RAM (süreli) | RAM + Disk (persist) |
| En Uygun Kullanım | Script çalıştırma süresini azaltma | Uygulama düzeyinde veri önbellekleme | Oturum, kuyruk, dağıtık cache |
| Yönetim Kolaylığı | php.ini üzerinden basit | php.ini + APCu extension | Sunucu kurulumu ve client library |
| Performans Kazancı | %30‑50 | %10‑20 | %40‑70 (veri tipine bağlı) |
Örneğin, bir e‑ticaret sitesinde ürün listesi sorgularını e-ticaret hosting üzerinden Redis ile, şablon derlemelerini ise OPcache ile önbelleğe almak, toplam yanıt süresini %60’a varan bir oranda iyileştirebilir.
Gerçek Dünya Senaryosu: OPcache ile Yoğun Trafikli Bir Blogun Hızlandırılması
Bir müşterimiz, aylık 2 milyon sayfa görüntüleme yapan bir haber blogu işletiyordu. PHP‑FPM ayarları varsayılan, OPcache ise kapalıydı. Site, ortalama 2,8 saniye yanıt süresi ve %70 CPU kullanımına sahiptir.
Yapılan adımlar:
- OPcache’i
opcache.memory_consumption=256veopcache.max_accelerated_files=25000değerleriyle etkinleştirdik. opcache.revalidate_freq=60veopcache.validate_timestamps=0ayarlarıyla dosya kontrol sıklığını düşürdük.- APCu ekleyerek sık kullanılan menü ve reklam bloklarını önbelleğe aldık.
- PHP‑FPM pool sayısını 8’den 12’ye çıkardık, fiziksel sunucu kaynaklarını daha iyi kullandık.
Sonuçlar: Ortalama yanıt süresi 1,2 saniyeye düştü, CPU kullanım oranı %38’e indi ve hit ratio %92 olarak ölçüldü. Bu iyileştirme, aynı altyapıda %45 daha fazla trafik kaldırma kapasitesi sağladı.
Sıkça Sorulan Sorular
OPcache neden sadece PHP‑CLI için de etkinleştirilmeli?
CLI (komut satırı) ortamları, özellikle artisan gibi framework komutları çalıştırırken de PHP kodunu derler. OPcache’i CLI’da da aktif tutmak, uzun süren migrasyon ve bakım scriptlerinin daha hızlı tamamlanmasını sağlar.
OPcache’i devre dışı bırakmadan sadece belirli dizinleri dışarıda tutabilir miyim?
Evet. opcache.blacklist_filename parametresiyle bir dosya listesi tanımlayarak, örneğin /var/www/html/tests/ gibi geliştirme klasörlerini önbelleğe almaktan hariç tutabilirsiniz.
OPcache ile birlikte OPCache File Cache (opcache.file_cache) ne işe yarar?
Bu seçenek, opcode önbelleğini RAM yerine diske yazar. Sunucu yeniden başlatıldığında önbellek kaybolmaz; dolayısıyla “soğuk başlangıç” süresi azalır. Ancak disk I/O maliyeti artırabilir, bu yüzden SSD tabanlı sunucularda tercih edilmelidir.
OPcache ayarlarını değiştirdikten sonra hemen etkili olur mu?
php.ini dosyasında yapılan değişiklikler, PHP‑FPM veya Apache servisi yeniden başlatıldığında (veya reload edildiğinde) geçerli olur. opcache_reset() komutu ise mevcut önbelleği anında temizler.
Sonuç: OPcache’i Şimdi Etkinleştirerek Performansınızı Katlayın
OPcache, PHP uygulamalarının en temel hızlandırma aracıdır ve doğru yapılandırıldığında %50’ye kadar yanıt süresi düşüşü sağlar. Yukarıdaki adımları izleyerek, AMD Ryzen VDS sunucular ya da Intel i9 VDS sunucular üzerindeki projelerinizi anında hızlandırabilirsiniz. İlk olarak php.ini dosyanızı güncelleyin, ardından opcache_get_status() ile hit ratio’yu izleyin. Performans artışı gözle görülürse, ek önbellek katmanları (APCu, Redis) ile birleştirerek ölçeklenebilirliği daha da artırabilirsiniz.
Unutmayın, önbellek ayarları bir kez yapılıp unutulmamalıdır; düzenli izleme ve gerektiğinde opcache_reset() komutuyla temizleme, uzun vadeli stabiliteyi garantiler. Şimdi sunucunuza SSH ile bağlanın, OPcache’i kurun ve sitenizin hızını ölçün – farkı hemen hissedeceksiniz.