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?
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?
Yanıtlar:
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 .
Ş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);
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:
Ekran görüntüleri:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache durumu
Özellikleri:
Ekran görüntüsü:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
Özellikleri:
Ekran görüntüsü:
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 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
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.
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
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.
opcache.revalidate_freq
bir 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_timestamps
olarak etkin olan ayarı değiştirmediğinizi varsayar .
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.
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
opcache.fast_shutdown = 0
Github.com/zendtech/ZendOptimizerPlus/issues/146