Hosting & Sunucu

Hosting ve sunucuda doğru OPcache yapılandırması

Her kod değişikliğinden sonra servisi yeniden başlatmanız gerekiyorsa veya OPcache belleği doluyorsa, bu kılavuz validate_timestamps ve bellek boyutunun doğru ayarını gösterir.

Hosting & Sunucu

Siteyi sunucuya koydunuz, kodu değiştiriyorsunuz, sayfayı yeniliyorsunuz ve hiçbir şey olmuyor. Dosyayı tekrar kaydediyorsunuz, yine aynı eski çıktı. Sonra bir kez PHP servisini yeniden başlatıyorsunuz ve her şey düzeliyor. İşte tam bu noktada tarayıcı önbelleğine ya da CDN'e değil, OPcache'e bakmanız gerekir.

OPcache, derlenmiş PHP dosyalarının bytecode'unu paylaşımlı bellekte tutar; böylece her istek dosyayı diskten yeniden okumak ve ayrıştırmak zorunda kalmaz. Sıradan bir WordPress sitesinde, yalnızca bu katman bile betik çalıştırma süresini yaklaşık 80 milisaniyeden 25 milisaniyeye indirebilir. Kesin sayı eklenti sayısına ve kod boyutuna bağlıdır, ancak değişimin yönü her zaman aynıdır.

Kod değişikliği neden uygulanmıyor

Kilit parametre burada: opcache.validate_timestamps. Değeri 1 olduğunda, OPcache her birkaç saniyede bir (opcache.revalidate_freq temelinde) dosyanın değişiklik zamanını kontrol eder ve dosya daha yeniyse önbelleğe alınmış sürümü atar. Değeri 0 olduğunda, bu kontrol tamamen kapatılır ve PHP yeniden başlatılana ya da önbellek temizlenene kadar aynı eski bytecode sunulur.

Üretim sunucusunda 0 koymak cezbedicidir çünkü birkaç milisaniye tasarruf sağlar. Ancak bedeli, her dağıtımın açık bir önbellek temizleme adımıyla birlikte gelmesi gerektiğidir; aksi halde kullanıcıların yarısı sitenin eski sürümünü, yarısı yeni sürümünü görür. Dağıtım süreciniz otomatik ve güvenilir değilse, 1 değerini koruyun ve opcache.revalidate_freq değerini 2 yapın. Performans farkı pratikte önemsizdir; zahmet farkı ise değildir.

Burada hata yapıyorlar

Yaygın hata, geliştiricinin geliştirme sunucusunda da validate_timestamps=0 koyması ve ardından var olmayan bir hatayı saatlerce aramasıdır. İşareti şudur: kodu var_dump ile değiştiriyorsunuz, çıktı değişmiyor, ancak dosyayı yeni bir adla kopyalayıp onu çağırdığınızda düzgün çalışıyor. O an, suçlu uygulama mantığı değil, önbellektir. Geliştirme ortamında her zaman validate_timestamps=1 ve revalidate_freq=0 koyun ki her değişiklik anında görülsün.

OPcache belleğini ne kadar ayarlamalıyız

opcache.memory_consumption varsayılan değeri birçok derlemede 128 megabayttır ve birkaç eklentili bir WordPress sitesi için yeterli değildir. Bu bellek dolduğunda, OPcache betikleri atmaya ve yeniden derlemeye başlar; sonuç, günlükte hiçbir hata görmezken performans düşüşüdür.

Gerçek durumu görmek için opcache_get_status() betiğini çalıştırın ya da php -i | grep opcache çıktısıyla başlayın. Eğer opcache_get_status()['opcache_statistics']['oom_restarts'] sıfırdan büyükse, bellek yetmemiş demektir. 256 sayısı çoğu site için makul bir başlangıç noktasıdır; büyük çerçeveli ağır siteler 512'ye kadar çıkar.

Diğer iki parametre de önemlidir. opcache.max_accelerated_files önbelleğe alınan dosya sayısının üst sınırıdır ve varsayılanı 10000'dir. Ağır eklentili bir WordPress kurulumu bu sayıyı kolayca aşar. 20000 veya 30000 değerini koyun. Ve varsayılanı 8 megabayt olan opcache.interned_strings_buffer; dosyalar arasında tekrarlanan dizelerin paylaşılması için 16 veya 32 yapın.

Örnek yapılandırma

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
opcache.save_comments=1
opcache.fast_shutdown=1

Şu save_comments=1 değerini hafife almayın. 0 yaparsanız, anotasyonlar ve DocBlock yorumları bytecode'dan çıkarılır ve bunlara dayanan her şey çalışmaz hale gelir; anotasyon tabanlı ORM'lerden bazı WordPress eklentilerine kadar. Bellek tasarrufu küçüktür, bozulma maliyeti büyüktür.

OPcache mi, APCu mi, Redis mi?

Bunlar birbirinin yerini tutmaz ve karıştırmak insanın zamanını boşa harcar.

KatmanNeyi önbelleğe alırNerede kullanılır
OPcachePHP dosyalarının bytecode'uHer yerde, istisnasız
APCuAynı sunucunun belleğinde uygulama verileriTek sunuculu nesne önbelleği
Redis / MemcachedAyrı serviste uygulama verileriÇoklu sunucu, paylaşımlı oturum

Site tek bir sunucudaysa, APCu ağ gidiş-dönüşü olmadığı için Redis'ten daha basit ve daha hızlı yanıt verir. Load balancer arkasında birden fazla sunucudaysanız, APCu işe yaramaz çünkü her sunucunun kendi önbelleği vardır ve kullanıcı her istekten sonra başka bir sunucuya gidebilir. Orada doğru seçim Redis'tir. Tek sunuculu bir Linux hosting üzerinde kurulum için, OPcache ile birlikte APCu neredeyse her zaman yeterlidir.

OPcache'i ne zaman kapatmalısınız

Geliştirme ortamında, dediğimiz gibi. Ayrıca opcache.file_cache kullandığınızda ve önbellek dosyaları farklı PHP sürümleri arasında paylaşılan diskte olduğunda; bu durum uyumsuz bytecode döndürebilir ve kodunuzla hiç ilgisi olmayan tuhaf bir hata verebilir. Böyle bir hata görürseniz, önce opcache.file_cache dosyasını boşaltın.

Ve pratik bir not: her dağıtımdan sonra, validate_timestamps=0 varsa, önbellek temizlemeyi unutmayın. En basit yol, bir CLI betiğinden opcache_reset() çağırmaktır ya da systemctl reload php8.2-fpm ile php-fpm'i yeniden yüklemektir. reload'un yeterli olduğunu ve tam bir restart'a gerek olmadığını unutmayın; reload etkin bağlantıları kesmez.

Bu ayarlardan sonra hâlâ yavaşlık görüyorsanız, sorun başka bir yerdedir. Sunucu hata günlüğünü okumakla başlayın ve her seferinde işin bir kısmını yeniden yapan tekrarlayan bir hata olup olmadığına bakın. Site bazen tamamen erişilemez hale geliyorsa, doğru yol önbellek ayarlarına dokunmak değil, aralıklı kesintilerin kökenini bulmaktır.

Sık sorulan sorular

PHP dosyasını değiştirdikten sonra değişiklikler neden uygulanmıyor?

Çünkü OPcache önceki derlenmiş sürümü bellekte tutuyor ve dosya değişiklik zamanı kontrolü kapalı. opcache.validate_timestamps değerini kontrol edin; 0 ise, ya onu 1 yapın ya da her değişiklikten sonra önbelleği opcache_reset() ile temizleyin.

Uygun opcache.memory_consumption değeri nedir?

Çoğu WordPress sitesi için 256 megabayt iyi bir başlangıç noktasıdır. opcache_get_status() çıktısında oom_restarts değeri sıfırdan büyükse, bellek azdır ve yükseltmeniz gerekir. Büyük çerçeveli ağır siteler 512 megabayta kadar çıkar.

OPcache paylaşımlı hostingde de etkin mi?

Çoğu Linux hostingde OPcache varsayılan olarak etkindir, ancak değerlerini genellikle panelden değiştiremezsiniz çünkü ayarlar sunucu düzeyinde uygulanır. İnce ayar gerekiyorsa, php.ini üzerinde tam kontrole sahip bir sunucuya geçmelisiniz.

OPcache ile WordPress önbelleği arasındaki fark nedir?

OPcache daha alt düzeyde ve WordPress'ten bağımsız çalışır ve yalnızca PHP dosyalarının bytecode'unu önbelleğe alır. WordPress önbelleği ise sorgu çıktılarını ve HTML parçalarını tutar. Bu ikisi rakip değildir; her ikisi de etkin olmalıdır ve her biri farklı bir katmanı kapsar.

Şu anda kendi sunucunuzda php.ini erişiminiz varsa, önce max_accelerated_files değerini kontrol edin. Bu parametre, düşündüğünüzden daha fazla WordPress sitelerini etkiler ve en az dikkat çeken parametredir.

ServerNet Destek

ServerNet mühendislik ve yayın ekibi — altyapı, ağ ve web barındırma uzmanları.

Linux Hosting
Paylaş:

Yorumlar 0

Henüz yorum yok — ilk siz olun!

Yorum bırakın

İlgili hizmet

Linux Hosting

LiteSpeed ile NVMe RAID-10 üzerinde PHP ve MySQL barındırma — kişisel bloglardan kurumsal Laravel uygulamalarına her sitenin sağlam temeli.