PHP OPCache nasıl kullanılır?


249

PHP 5.5 yayınlandı ve OPCache adlı yeni bir kod önbellek modülü içeriyor, ancak bunun için herhangi bir belge yok gibi görünüyor.

Peki bunun için belgeler nerede ve OPcache'i nasıl kullanırım?




Dokümantasyon bize opcache doğru derlemek / devre dışı bırakmak ne de PHP 5.6.24+ kaynağının autoconf geçici çözüm nasıl anlatmak için çok kötü , böylece PHP derlemek! :-(
Filip OvertoneSinger Rydlo

@ Fred-ii- " Ayarlanması gerekebilecek birçok ayar var. Nasıl çalıştığını anlamak ve PHP 5.5 sürümünün kararlılık aşaması sırasında sorunları tanımlamak çok yardımcı olacaktır." ... bu blog yazısı çok yardımcı değil. Nasıl çalıştığını veya ayarların en iyi nasıl yapılacağını anlayamaz :(
icc97

Yanıtlar:


371

Kurulum

OpCache varsayılan olarak PHP5.5 + 'da derlenmiştir. Ancak, varsayılan olarak devre dışıdır. PHP5.5 + 'da OpCache kullanmaya başlamak için önce etkinleştirmeniz gerekir. Bunu yapmak için aşağıdakileri yapmanız gerekir.

Aşağıdaki satırı ekleyin php.ini:

zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)

Yol boşluklar içerdiğinde, tırnak işaretleri içine almanız gerektiğini unutmayın:

zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"

Ayrıca zend_extension, "normal" yerine yönergeyi kullanmanız gerekeceğini unutmayın.extension , gerçek Zend motorunu (yani PHP çalıştıran şeyi) etkilediği için .

kullanım

Şu anda kullanabileceğiniz dört işlev vardır:

opcache_get_configuration():

OpCache tarafından kullanılmakta olan yapılandırmayı içeren bir dizi döndürür. Bu, tüm ini ayarlarını, sürüm bilgilerini ve kara listeye alınmış dosyaları içerir.

var_dump(opcache_get_configuration());

opcache_get_status():

Bu, önbelleğin geçerli durumu hakkında bilgi içeren bir dizi döndürür. Bu bilgiler aşağıdakileri içerecektir: önbelleğin bulunduğu durum (etkin, yeniden başlatma, tam vb.), Bellek kullanımı, isabetler, özümler ve daha kullanışlı bilgiler. Ayrıca önbelleğe alınmış komut dosyalarını da içerecektir.

var_dump(opcache_get_status());

opcache_reset():

Tüm önbelleği sıfırlar. Yani olası tüm önbelleğe alınmış komut dosyaları bir sonraki ziyarette yeniden ayrıştırılacaktır.

opcache_reset();

opcache_invalidate():

Belirli bir önbelleğe alınmış komut dosyasını geçersiz kılar. Yani komut dosyası bir sonraki ziyarette yeniden ayrıştırılacaktır.

opcache_invalidate('/path/to/script/to/invalidate.php', true);

Bakım ve raporlar

OpCache'nin korunmasına ve faydalı raporların oluşturulmasına yardımcı olmak için oluşturulmuş bazı GUI'ler vardır. Bu araçlar yukarıdaki işlevleri kullanır.

OpCacheGUI

Feragat Bu projenin yazarıyım

Özellikleri:

  • OpCache durumu
  • OpCache yapılandırması
  • OpCache istatistikleri
  • OpCache sıfırlama
  • Önbelleğe alınmış komut dosyalarına genel bakış
  • Önbelleğe alınmış komut dosyaları geçersiz kılma
  • Çok dilli
  • Mobil cihaz desteği
  • Parlak grafikler

Ekran görüntüleri:

durum

önbelleğe-komut

grafikleri

mobilr

URL: https://github.com/PeeHaa/OpCacheGUI

opcache durumu

Özellikleri:

  • OpCache durumu
  • OpCache yapılandırması
  • OpCache istatistikleri
  • Önbelleğe alınmış komut dosyalarına genel bakış
  • Tek dosya

Ekran görüntüsü:

durum

URL: https://github.com/rlerdorf/opcache-status

opcache-gui

Özellikleri:

  • OpCache durumu
  • OpCache yapılandırması
  • OpCache istatistikleri
  • OpCache sıfırlama
  • Önbelleğe alınmış komut dosyalarına genel bakış
  • Önbelleğe alınmış komut dosyaları geçersiz kılma
  • Otomatik yenileme

Ekran görüntüsü:

opcache-GUI genel

URL: https://github.com/amnuts/opcache-gui


6
PHP-CLI ile ilgili bir şey var mı? CLI bunu nasıl kullanır? FPM yeniden başlatıldığında, OPCache sıfırlanır - CLI'nin OPCache'ini de etkiler mi? CLI'nin OPCache'si ayrı mı yoksa FPM ile aynı Önbellek havuzunu paylaşıyor mu? Teşekkürler!
Shahriyar Imanov

3
OpCache benim için ubuntu 14.04, apache 2.4.7, php 5.5.9'daki en son yüklememde varsayılan olarak etkinleştirildi.
jstats

merhaba, 3. ekran görüntünüzde, cache_full yanlış, tam sayfa önbellekleme ile ilgili olduğunu varsayıyorum, lütfen bana nasıl açacağınızı söyleyebilir misiniz? (bu doğru yapmak)
brucekaushik

Yanılıyorum, bu tam sayfayı önbelleğe almak için değil, ama önbelleğin kullandığı bellek dolu ise doğru olarak görünecektir. Yine de teşekkürler!
brucekaushik

zend_extension = C: \ path \ to \ php_opcache.dll (win) - Bu satırı php.ini dosyasına eklemek iyi çalışıyor.
kalidasan

152

OPcache APC'nin yerini aldı

OPcache APC modülünün yerini alacak şekilde tasarlandığından, bunları PHP'de paralel olarak çalıştırmak mümkün değildir. Kod yazma biçiminizi etkilemediğinden PHP opcode'unu önbelleğe almak için bu iyidir.

Ancak, şu anda APC'yi başka veriler ( apc_store()işlev aracılığıyla ) saklamak için kullanıyorsanız, OPCache kullanmaya karar verirseniz bunu yapamayacağınız anlamına gelir.

Her ikisini de paylaşılan PHP belleğinde veri depolayan APCu veya Yac gibi başka bir kütüphane kullanmanız veya verileri PHP'de ayrı bir işlemde bellekte depolayan memcached gibi bir şey kullanmaya geçmeniz gerekir .

Ayrıca, OPcache, APC'de mevcut yükleme ilerleme ölçer ile eşdeğer değildir. Bunun yerine Oturum Yükleme İlerlemesini kullanmalısınız .

OPcache ayarları

OPcache için dokümantasyon bulunabilir burada listelenen yapılandırma seçeneklerinin tamamı ile buraya . Önerilen ayarlar:

; Sets how much memory to use
opcache.memory_consumption=128

;Sets how much memory should be used by OPcache for storing internal strings 
;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8

; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000

;How often (in seconds) to check file timestamps for changes to the shared
;memory storage allocation.
opcache.revalidate_freq=60

;If enabled, a fast shutdown sequence is used for the accelerated code
;The fast shutdown sequence doesn't free each allocated block, but lets
;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1

;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1

Kod ek açıklamaları kullanan herhangi bir kütüphane veya kod kullanıyorsanız, yorumları kaydetmeyi etkinleştirmelisiniz:

opcache.save_comments=1

Devre dışı bırakılırsa, optimize edilmiş kodun boyutunu azaltmak için tüm PHPDoc yorumları koddan çıkarılır. "Doküman Yorumlarını" devre dışı bırakmak mevcut bazı uygulamaları ve çerçeveleri (ör. Doktrin, ZF2, PHPUnit) bozabilir


4
Üretim ortamları, geliştirme veya her ikisi için önerilen ayarlar bu mu?
marcvangend

1
Belki de tam olarak opcache nedir ve ne için kullanıldığım bir yanlış anlama ama yapılandırılmış ve aşağıdaki PeeHaa durum komut dosyası ile test var. Her şey çalışıyor. Ama hala OP sorusunu soruyorum. "Bu nasıl kullanılır?" Görüntülemeleri önbelleğe almak için değil, işler öyle mi?
isimmons

3
@isimmons "OPcache, önceden derlenmiş komut dosyası bayt kodunu paylaşılan bellekte depolayarak PHP performansını geliştirir, böylece PHP'nin her istek üzerine komut dosyası yükleme ve ayrıştırma ihtiyacını ortadan kaldırır."
Danack

1
@marcvangend İyi bir nokta! Bence önbellekleme üretimde sadece gerçek anlamlıdır, bu yüzden bu yapılandırmalar muhtemelen üretim ayarlarıdır.
Sliq

3
Herkes önerilen ayar performansının neden varsayılandan daha kötü olduğunu veya ne zaman etkili olmaya başlayacağını açıklayabilir mi?
RP

19

Opcache kullandığım için iki sentime düşeceğim.

Veritabanımla konuşabilmek için birçok alan, doğrulama yöntemi ve numaralandırma içeren kapsamlı bir çerçeve yaptım.

Opache olmadan

Bu komut dosyasını opcache olmadan kullandığımda ve 9000 istekleri 2.8 saniyede apache sunucusuna ittiğimde, tüm istekleri yakalayana kadar 70-80 saniye boyunca% 90-100 cpu'da maksimuma çıkar.

Total time taken: 76085 milliseconds(76 seconds)

Opcache etkinken

Opcache etkinken yaklaşık 25 saniye boyunca% 25-30 işlemci hızında çalışır ve asla% 25 işlemci kullanımını geçmez.

Total time taken: 26490 milliseconds(26 seconds)

Tüm statik ve işlevselliği değiştirmek gerekmez çerçeve dışında her şeyin önbelleğe devre dışı bırakmak için bir opcache kara liste dosyası yaptık. Önbellek dosyalarını yeniden yükleme / doğrulama konusunda endişelenmeden geliştirebilmem için sadece çerçeve dosyaları için açıkça seçiyorum. Her şeyin önbelleğe alınması, isteklerin toplamında bir saniye tasarruf sağlar25546 milliseconds

Bu, sunucu bir ter kırmadan bile saniyede işleyebileceğim veri / istek miktarını önemli ölçüde artırır.


3
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;Sadece değiştirin; ini dosyasında bir enter ile. Ama ben bunu kullandım. çoğunlukla varsayılan şeyler
Tschallacka

1
btw, bana 2100 veritabanı yapıyor memcache ile çalışan bir saniye 150 mikrosaniye (bir milisaniyenin yaklaşık
1/6

1
Opcache, php dosyalarını bellekte derlenmiş biçimde önbelleğe alır. Yani artık diskten okuma ve php ayrıştırıcı tarafından dosyaları derleme ve optimize etme yükü yok. Memcache, oturumlar arasında değişkenleri saklamak için kullanabileceğiniz bir şeydir. Örneğin, bir kullanıcının 10 saniye boyunca aynı parametreleri isteyen bir güncelleme betiği olduğunu ve kullanıcı ekrana baktığını varsayalım. Sorguyu bir kez derlemek için mem önbelleğini kullanabilir ve sonra derlenmiş sorguyu yeniden oluşturmak yerine bellekten istemeye devam edebilirsiniz.
Tschallacka

2
öyle değil. opcache.revalidate_freq=60;bir dosyanın saniye içinde bellekte ne kadar süre yaşayacağını belirler. zaman dolduğunda dosyayı yeniden derler.
Tschallacka

3
Aslında, opcache.revalidate_freqbir komut dosyasının değişiklikler için ne sıklıkta denetlendiğini kontrol eder (zaman damgasının değişip değişmediğine bağlı olarak). Dolayısıyla, bir komut dosyasının zaman damgası en son derlendiği zamanla aynı kalırsa, yeniden derlenmez. Tüm bunlar, varsayılan opcache.validate_timestampsolarak etkin olan ayarı değiştirmediğinizi varsayar .
jjlin

4

Amazon Linux'ta PHP 5.6 ile (RedHat veya CentOS'ta aynı olmalıdır):

yum install php56-opcache

ve sonra apache'yi yeniden başlatın.


2

Bu moodle kurarken karşılaştım. Aşağıdaki satırları php.ini dosyasına ekledim.

zend_extension=C:\xampp\php\ext\php_opcache.dll

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60

; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0

; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487

; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps

extension=C:\xampp\php\ext\php_intl.dll

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING

intl -> http://php.net/manual/en/book.intl.php


1
Bu ayarların burada belgelendiğini belirtmek gerekir: docs.moodle.org/30/en/OPcache
sierrasdetandil

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.