OPcache Nedir ve Neden Önemlidir?

PHP, her istek geldiğinde kaynak kodunu yorumlayarak çalışır. Bu süreç, dosya okuma, sözdizimi analizi ve derleme adımlarını içerdiği için özellikle yüksek trafikli sitelerde gecikmeye yol açar. OPcache, PHP 5.5 ve üzeri sürümlerde varsayılan olarak gelen bir opcode cache (opcode önbelleği) sistemidir. Kaynak kodunu bir kez derleyip bytecode hâline getirdikten sonra bellekte saklar, böylece sonraki isteklerde derleme adımı atlanır ve yanıt süresi %30‑%70 arasında azalabilir.
OPcache’in temel avantajı, CPU kullanımını düşürmesi ve I/O yükünü azaltmasıdır. Özellikle AMD Ryzen VDS sunucular gibi yüksek çekirdekli platformlarda, cache’in verimli kullanımı sayesinde aynı anda daha fazla istek işlenebilir. Bu da barındırma maliyetlerini düşürürken, kullanıcı deneyimini iyileştirir.
OPcache’in Çalışma Prensibi ve Temel Ayarlar
OPcache, PHP’nin Zend Engine’ine entegre olarak çalışır. PHP dosyası ilk kez çalıştırıldığında, Zend Engine kodu parse eder ve opcode (işlem kodu) üretir. OPcache bu opcode’u RAM’de tutar. Sonraki isteklerde aynı dosya tekrar çağrıldığında, PHP dosyası okunmaz; doğrudan önbellekteki opcode yürütülür. Bu mekanizma, dosya sistemine yapılan okuma sayısını %90’a kadar azaltabilir.
OPcache’i etkinleştirmek ve optimum performans elde etmek için php.ini dosyasına aşağıdaki temel ayarları eklemek gerekir:
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
Bu ayarlar, cache için 256 MB bellek ayırır, 10 000 dosyaya kadar önbellekleme yapar ve dosya değişikliklerini iki saniyede bir kontrol eder. validate_timestamps özelliği, geliştirme ortamında dosya değişikliklerinin anında algılanmasını sağlar; üretim ortamında ise 0 yapılması önerilir.
OPcache Performansını Ölçmek İçin Kullanılabilecek Araçlar
OPcache’in etkisini ölçmeden yapılandırma değişiklikleri yapmak riskli olabilir. web hosting paketleri içinde genellikle phpinfo() fonksiyonu ve opcache_get_status() fonksiyonu bulunur. phpinfo() sayfasında “OPcache” bölümü, bellek kullanımı, hit/miss oranları gibi kritik verileri gösterir.
Ayrıca SEO hosting hizmetlerinde sıkça kullanılan ab (ApacheBench) ve wrk gibi yük testi araçlarıyla ön ve sonrası yanıt sürelerini karşılaştırabilirsiniz. Örnek bir ab komutu:
ab -n 1000 -c 50 http://example.com/
Bu test, 1000 istek içinde ortalama yanıt süresini ve istek/saniye değerini verir. OPcache’i devre dışı bırakıp aynı testi tekrarladığınızda, genellikle %40‑%60 daha yüksek yanıt süresi gözlemlenir.
OPcache’i Özelleştiren Gelişmiş Ayarlar

Temel ayarlar çoğu senaryo için yeterli olsa da, büyük ölçekli uygulamalarda aşağıdaki ek parametreler performansı daha da artırabilir:
- opcache.max_wasted_percentage: Bellekteki kullanılmayan alanın %%’ini aşması durumunda cache temizlenir. %5‑%10 arası bir değer önerilir.
- opcache.blacklist_filename: Belirli dosyaların önbelleğe alınmasını engeller. Örneğin, sık güncellenen konfigürasyon dosyaları bu listede yer alabilir.
- opcache.optimization_level: Opcode optimizasyon seviyesini belirler. Varsayılan değer (0x7FFFBFFF) çoğu durumda iyidir; ancak bazı özel uzantılarla uyumsuzluk yaşanabilir.
Bu ayarların her birini php.ini dosyasına ekleyerek, örneğin opcache.max_wasted_percentage=5 gibi, bellek verimliliğini maksimize edebilirsiniz. Ancak değişiklik sonrası service php-fpm restart veya apache2ctl graceful komutlarıyla PHP hizmetini yeniden başlatmayı unutmayın.
OPcache ve Diğer Cache Çözümlerinin Karşılaştırması
| Özellik | OPcache | Redis Cache | Memcached |
|---|---|---|---|
| Tip | Opcode cache (PHP kodu) | Anahtar‑değer bellek | Anahtar‑değer bellek |
| Depolama | RAM (process memory) | RAM, disk (persistence) | RAM |
| Kullanım Amacı | PHP derleme süresini kısaltma | Uygulama verisi, oturum, kuyruk | Uygulama verisi, oturum |
| Kurulum | PHP içinde varsayılan | Ek uzantı ve sunucu | Ek uzantı ve sunucu |
| Performans Etkisi | %30‑%70 yanıt süresi düşüşü | Veri erişim süresi <1 ms | Veri erişim süresi <1 ms |
| Yönetim | php.ini ve opcache_get_status() | CLI ve GUI araçları | CLI ve GUI araçları |
Görüldüğü gibi OPcache, PHP kodunun çalıştırılma süresini iyileştirirken, Redis ve Memcached daha çok uygulama düzeyinde veri önbellekleme için kullanılır. Büyük projelerde her üç çözümü bir arada kullanmak, hem kod hem de veri katmanında maksimum hız sağlar.
Gerçek Dünya Senaryosu: E‑Ticaret Sitesinde OPcache Kullanımı
Bir e‑ticaret sitesinin en kritik noktası, ürün listeleme ve sepet işlemleridir. Bu sayfalarda PHP’nin yoğun bir şekilde çalıştığını düşünürsek, OPcache’in devreye alınmasıyla aşağıdaki iyileştirmeler elde edilebilir:
- Ürün sayfası yükleme süresi 1.8 s’dan 0.9 s’ye düşer (%50).
- Sepet güncelleme API’si 120 ms’den 45 ms’ye iner (%62).
- CPU kullanım oranı %70’den %45’e düşer, bu da aynı VDS üzerinde daha fazla eşzamanlı oturum anlamına gelir.
Bu sonuçlar, e-ticaret hosting paketlerinin sunduğu yüksek CPU ve RAM kaynaklarıyla birleştirildiğinde, maliyet etkin bir ölçeklenebilirlik sağlar. Özellikle kampanya dönemlerinde artan trafik, OPcache sayesinde sunucu çöküşü riski olmadan yönetilebilir.
OPcache’i Kurulum ve Yapılandırma Adımları
Şimdi adım adım OPcache’i etkinleştirip yapılandıralım. Bu kılavuz, Ubuntu 22.04 LTS ve PHP 8.2 kullanan bir VDS ortamı için hazırlanmıştır.
- PHP ve OPcache uzantısını kurun:
sudo apt update && sudo apt install php8.2 php8.2-opcache - php.ini dosyasını düzenleyin:
sudo nano /etc/php/8.2/fpm/php.inive aşağıdaki satırları ekleyin veya yorum satırını kaldırın:opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.validate_timestamps=1 opcache.revalidate_freq=2 - OPcache ayarlarını test edin: PHP‑CLI üzerinden
php -i | grep opcachekomutunu çalıştırın. Çıktıda “opcache.enable => On” gibi değerler görmelisiniz. - PHP‑FPM servisini yeniden başlatın:
sudo systemctl restart php8.2-fpm - Cache durumunu kontrol edin: Web kök dizinine
opcache_status.phpadlı dosya oluşturun:
Bu dosyayı tarayıcıda açarak hit/miss oranlarını izleyin.<?php print_r(opcache_get_status()); ?> - Üretim ortamı için optimize edin:
opcache.validate_timestamps=0veopcache.revalidate_freq=0ayarları, dosya değişikliklerini tamamen devre dışı bırakır, bu da en yüksek performansı verir. - Monitoring ekleyin: Sunucu izleme araçları (ör. Netdata, Grafana) ile OPcache bellek kullanımını grafikle izleyin ve gerektiğinde
opcache.memory_consumptiondeğerini artırın.
Bu adımları tamamladıktan sonra, PHP uygulamanızın yanıt süresi belirgin şekilde azalacak ve sunucu kaynakları daha verimli kullanılacaktır.
Sıkça Sorulan Sorular
OPcache’i devre dışı bırakmak güvenli midir?
Evet, OPcache’i devre dışı bırakmak sistem güvenliğini etkilemez; sadece performansı düşürür. Geliştirme ortamında opcache.enable=0 yaparak kod değişikliklerini anında görebilirsiniz.
OPcache bellek tüketimi çok yüksek olduğunda ne yapmalıyım?
OPcache’in memory_consumption değerini artırabilirsiniz. Ancak sunucunuzun RAM kapasitesini aşmamak gerekir. opcache.max_wasted_percentage ayarıyla da gereksiz bellek kullanımını kontrol edebilirsiniz.
OPcache ve APCu aynı anda kullanılabilir mi?
OPcache kod önbelleği, APCu ise kullanıcı veri önbelleği (user cache) sağlar. İkisi aynı anda kurulabilir ve farklı amaçlarla kullanılabilir; birbirlerine müdahale etmezler.
OPcache’i Docker konteyner içinde nasıl etkinleştiririm?
Dockerfile’da PHP‑FPM imajını baz alarak RUN docker-php-ext-install opcache komutunu ekleyin ve php.ini içinde gerekli ayarları tanımlayın. Konteyner başlatıldığında OPcache otomatik olarak çalışacaktır.
Sonuç: OPcache ile PHP Performansını Artırmanın Önemi ve Bir Sonraki Adım
OPcache, PHP uygulamalarının yanıt süresini %30‑%70 arasında azaltarak kullanıcı deneyimini ve SEO performansını doğrudan etkiler. Doğru yapılandırma, bellek ayarları ve düzenli izleme sayesinde, VDS sunucu paketleri içinde kaynaklarınızı en verimli şekilde kullanabilirsiniz. Özellikle yüksek trafikli e‑ticaret ve içerik sitelerinde OPcache’i devreye almak, ölçeklenebilirlik ve maliyet tasarrufu açısından kritik bir adımdır.
Artık OPcache’i kurduğunuza göre, bir sonraki adım fiziksel sunucu (dedicated server) ya da daha yüksek RAM kapasitesine sahip bir VDS’e geçiş yaparak önbellek boyutunu artırmak olabilir. Böylece büyük ölçekli projelerde bile %70’e varan hız artışlarını sürdürebilir, rekabet avantajınızı koruyabilirsiniz.