opcache olmadan PHP her istekte her dosyayı okur ve derler - hiç değişmemiş dosyalar için aynı işi, dakikada binlerce kez. opcache derlenmiş biçimi bellekte tutar. Genelde elde edilebilecek en büyük tekil iyileştirmedir ve tek bir ayardır.
opcache.enable=1
opcache.memory_consumption=192
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
Gerçekten açık mı, denetleyin
php -i | grep -E 'opcache.enable|opcache.memory'
# or, in a page you can reach:
print_r(opcache_get_status()['opcache_statistics']);
- opcache_hit_rate %95'in altında - memory_consumption fazla küçüktür ve yeniden gerekecek dosyaları dışarı atmaktadır.
- num_cached_keys, max_accelerated_files'a yakın - dosya sınırını yükseltin; büyük bir çerçevenin dosya sayısı varsayılanın izin verdiğinden fazladır.
Neyi YAPMAZ
Derlenmiş kodu önbelleğe alır, sonuçları değil. Yavaş bir sorgu, opcache açıkken de tıpatıp aynı yavaşlıktadır. Sayfanız veritabanına sorduğu şey yüzünden yavaşsa bu hiçbir şeyi değiştirmez - ve en sık yaşanan hayal kırıklığı budur.
Bir dağıtımı gizleyen ayar
opcache.validate_timestamps=0 daha hızlıdır ve PHP'nin bir dosyanın değişip değişmediğine hiç bakmaması demektir. Dağıtımınız çıkar, site eski kodu sunmayı sürdürür, hiçbir yerde hata da olmaz. Bunu ayarlarsanız dağıtımınızın önbelleği sıfırlaması ZORUNLUDUR.# after deploying, with validate_timestamps=0
cachetool opcache:reset
# or reload the pool
systemctl reload php8.3-fpm
EGPHP barındırmasında opcache açıktır ve havuza göre ayarlanmıştır. Bu sayfa, kendi işlettiğiniz bir sanal sunucu içindir.