Sayang sekali bahwa Dokumentasi TIDAK memberi tahu kami cara mengkompilasi opcache dengan benar / menonaktifkannya atau tidak memecahkan masalah sumber autoconf PHP 5.6.24+, sehingga PHP dapat dikompilasi! :-(
Filip OvertoneSinger Rydlo
@ Fred-ii- "Ada banyak pengaturan yang mungkin perlu disesuaikan. Memahami cara kerjanya dan mengidentifikasi masalah selama fase stabilisasi proses rilis PHP 5.5 akan sangat membantu." ... Posting blog itu tidak terlalu membantu. Itu tidak menjelaskan cara memahami cara kerjanya atau cara terbaik untuk menyesuaikan pengaturan :(
icc97
Jawaban:
371
Instalasi
OpCache dikompilasi secara default di PHP5.5 +. Namun itu dinonaktifkan secara default. Untuk mulai menggunakan OpCache di PHP5.5 +, Anda harus mengaktifkannya terlebih dahulu. Untuk melakukan ini, Anda harus melakukan yang berikut.
Juga perhatikan bahwa Anda harus menggunakan zend_extensionarahan alih-alih direktif "normal" extensionkarena itu mempengaruhi mesin Zend yang sebenarnya (yaitu hal yang menjalankan PHP).
Pemakaian
Saat ini ada empat fungsi yang dapat Anda gunakan:
Mengembalikan array yang berisi konfigurasi yang digunakan OpCache saat ini digunakan. Ini termasuk semua pengaturan ini serta informasi versi dan file daftar hitam.
Ini akan mengembalikan array dengan informasi tentang status cache saat ini. Informasi ini akan mencakup hal-hal seperti: keadaan cache (diaktifkan, restart, penuh dll), penggunaan memori, klik, kehilangan dan beberapa informasi yang lebih berguna. Ini juga akan berisi skrip yang di-cache.
Ada beberapa GUI yang dibuat untuk membantu memelihara OpCache dan menghasilkan laporan yang bermanfaat. Alat-alat ini memanfaatkan fungsi-fungsi di atas.
Ada yang terkait dengan PHP-CLI? Bagaimana CLI menggunakannya? Ketika FPM dimulai kembali, OPCache me-reset - apakah itu juga mempengaruhi OPCache CLI? Apakah OPCache CLI terpisah atau apakah berbagi Cache pool yang sama dengan FPM? Terima kasih!
Shahriyar Imanov
3
OpCache diaktifkan secara default untuk saya pada instalasi terbaru saya di ubuntu 14.04, apache 2.4.7, php 5.5.9.
jstats
hai, di tangkapan layar ke-3 Anda, cache_full salah, saya berasumsi ini terkait dengan caching halaman penuh, dapatkah Anda memberi tahu saya cara mengaktifkannya? (jadikan itu benar)
brucekaushik
Saya salah, itu bukan untuk caching halaman penuh, tetapi itu akan ditampilkan sebagai benar jika memori yang digunakan cache penuh. Bagaimanapun, terima kasih!
brucekaushik
zend_extension = C: \ path \ to \ php_opcache.dll (win) - Menambahkan baris ini di php.ini berfungsi dengan baik.
kalidasan
152
OPcache menggantikan APC
Karena OPcache dirancang untuk menggantikan modul APC, tidak mungkin untuk menjalankannya secara paralel di PHP. Ini bagus untuk caching opcode PHP karena tidak mempengaruhi bagaimana Anda menulis kode.
Namun itu berarti bahwa jika Anda saat ini menggunakan APC untuk menyimpan data lain (melalui apc_store()fungsi) Anda tidak akan dapat melakukannya jika Anda memutuskan untuk menggunakan OPCache.
Anda perlu menggunakan pustaka lain seperti APCu atau Yac yang keduanya menyimpan data dalam memori PHP bersama, atau beralih untuk menggunakan sesuatu seperti memcached, yang menyimpan data dalam memori dalam proses terpisah ke PHP.
Selain itu, OPcache tidak memiliki padanan dengan meter kemajuan pengunggahan yang ada di APC. Sebaliknya, Anda harus menggunakan Kemajuan Unggahan Sesi .
Pengaturan untuk OPcache
Dokumentasi untuk OPcache dapat ditemukan di sini dengan semua opsi konfigurasi yang tercantum di sini . Pengaturan yang disarankan adalah:
; 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
Jika Anda menggunakan pustaka atau kode yang menggunakan anotasi kode, Anda harus mengaktifkan simpan komentar:
opcache.save_comments=1
Jika dinonaktifkan, semua komentar PHPDoc dikeluarkan dari kode untuk mengurangi ukuran kode yang dioptimalkan. Menonaktifkan "Komentar Doc" dapat merusak beberapa aplikasi dan kerangka kerja yang ada (mis. Doctrine, ZF2, PHPUnit)
Apakah pengaturan yang disarankan untuk lingkungan produksi, untuk pengembangan, atau keduanya?
marcvangend
1
Mungkin kesalahpahaman di pihak saya tentang apa sebenarnya opcache itu dan apa yang digunakan untuk tetapi saya sudah mengkonfigurasi dan diuji dengan skrip status PeeHaa di bawah ini. Semua berfungsi. Tapi saya masih menanyakan pertanyaan OP. "Bagaimana cara menggunakannya?" Ini bukan untuk caching pandangan dan hal apa itu?
isimmons
3
@isimmons "OPcache meningkatkan kinerja PHP dengan menyimpan bytecode skrip yang dikompilasi dalam memori bersama, sehingga menghilangkan kebutuhan PHP untuk memuat dan mem-parsing skrip pada setiap permintaan."
Danack
1
@marcvangend Poin bagus! Saya pikir caching hanya masuk akal dalam produksi, jadi konfigurasi ini mungkin merupakan pengaturan produksi.
Sliq
3
Adakah yang bisa menjelaskan mengapa kinerja pengaturan yang disarankan lebih buruk daripada standar atau kapan mereka harus mulai memberi efek?
RP
19
Saya akan memasukkan dua sen saya untuk apa yang saya gunakan opcache.
Saya telah membuat kerangka kerja yang luas dengan banyak bidang dan metode validasi dan enum untuk dapat berbicara dengan basis data saya.
Tanpa opcache
Saat menggunakan skrip ini tanpa opcache dan saya mendorong 9000 permintaan dalam 2,8 detik ke server apache, maka maks. Keluar pada 90-100% cpu selama 70-80 detik hingga memenuhi semua permintaan.
Total time taken: 76085 milliseconds(76 seconds)
Dengan opcache diaktifkan
Dengan opcache diaktifkan, beroperasi pada waktu cpu 25-30% selama sekitar 25 detik dan tidak pernah melewati penggunaan cpu 25%.
Total time taken: 26490 milliseconds(26 seconds)
Saya telah membuat file blacklist opcache untuk menonaktifkan caching semua kecuali kerangka yang semuanya statis dan tidak perlu mengubah fungsionalitas. Saya memilih secara eksplisit untuk hanya file kerangka sehingga saya dapat mengembangkan tanpa khawatir tentang memuat ulang / memvalidasi file cache. Setelah semuanya di-cache menghemat satu detik dari total permintaan25546 milliseconds
Ini secara signifikan memperluas jumlah data / permintaan saya dapat menangani per detik tanpa server bahkan berkeringat.
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;Cukup ganti; dengan enter di file ini. Tapi inilah yang saya gunakan. sebagian besar barang bawaan
Tschallacka
1
btw, saya menjalankan ini dengan memcache melakukan 2100 permintaan basis data per detik menjalankan skrip yang saya gunakan dalam 150 mikrodetik (sekitar
1/6
1
Opcache menyimpan file php dalam bentuk yang dikompilasi dalam memori. Jadi Anda tidak perlu membaca dari disk dan mengkompilasi & mengoptimalkan file oleh parser php lagi. Memcache adalah sesuatu yang dapat Anda gunakan untuk menyimpan variabel di antara sesi. Katakanlah misalnya pengguna memiliki skrip pembaruan yang meminta parameter yang sama selama 10 detik sementara pengguna menatap layar. Anda dapat menggunakan mem cache untuk mengkompilasi permintaan sekali, dan kemudian terus meminta permintaan dikompilasi dari memori bukan dari regenerasi itu.
Tschallacka
2
tidak. opcache.revalidate_freq=60;menentukan berapa lama file dapat hidup dalam memori dalam hitungan detik. ketika waktu habis itu mengkompilasi ulang file.
Tschallacka
3
Sebenarnya, opcache.revalidate_freqkontrol seberapa sering skrip diperiksa untuk perubahan (berdasarkan apakah timestamp-nya berubah). Jadi jika stempel waktu skrip tetap sama dengan terakhir kali kompilasi, skrip tidak akan dikompilasi ulang. Semua ini dengan asumsi Anda belum mengubah opcache.validate_timestampspengaturan, yang diaktifkan secara default.
jjlin
4
Dengan PHP 5.6 di Amazon Linux (harus sama dengan RedHat atau CentOS):
Jawaban:
Instalasi
OpCache dikompilasi secara default di PHP5.5 +. Namun itu dinonaktifkan secara default. Untuk mulai menggunakan OpCache di PHP5.5 +, Anda harus mengaktifkannya terlebih dahulu. Untuk melakukan ini, Anda harus melakukan yang berikut.
Tambahkan baris berikut ke Anda
php.ini
:Perhatikan bahwa ketika path berisi spasi Anda harus membungkusnya dengan tanda kutip:
Juga perhatikan bahwa Anda harus menggunakan
zend_extension
arahan alih-alih direktif "normal"extension
karena itu mempengaruhi mesin Zend yang sebenarnya (yaitu hal yang menjalankan PHP).Pemakaian
Saat ini ada empat fungsi yang dapat Anda gunakan:
opcache_get_configuration()
:Mengembalikan array yang berisi konfigurasi yang digunakan OpCache saat ini digunakan. Ini termasuk semua pengaturan ini serta informasi versi dan file daftar hitam.
opcache_get_status()
:Ini akan mengembalikan array dengan informasi tentang status cache saat ini. Informasi ini akan mencakup hal-hal seperti: keadaan cache (diaktifkan, restart, penuh dll), penggunaan memori, klik, kehilangan dan beberapa informasi yang lebih berguna. Ini juga akan berisi skrip yang di-cache.
opcache_reset()
:Mereset seluruh cache. Berarti semua skrip cache yang mungkin akan diuraikan lagi pada kunjungan berikutnya.
opcache_invalidate()
:Membatalkan skrip cache tertentu. Artinya skrip akan diuraikan lagi pada kunjungan berikutnya.
Pemeliharaan dan laporan
Ada beberapa GUI yang dibuat untuk membantu memelihara OpCache dan menghasilkan laporan yang bermanfaat. Alat-alat ini memanfaatkan fungsi-fungsi di atas.
OpCacheGUI
Penafian Saya penulis proyek ini
Fitur:
Tangkapan layar:
URL: https://github.com/PeeHaa/OpCacheGUI
opcache-status
Fitur:
Tangkapan layar:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
Fitur:
Tangkapan layar:
URL: https://github.com/amnuts/opcache-gui
sumber
OPcache menggantikan APC
Karena OPcache dirancang untuk menggantikan modul APC, tidak mungkin untuk menjalankannya secara paralel di PHP. Ini bagus untuk caching opcode PHP karena tidak mempengaruhi bagaimana Anda menulis kode.
Namun itu berarti bahwa jika Anda saat ini menggunakan APC untuk menyimpan data lain (melalui
apc_store()
fungsi) Anda tidak akan dapat melakukannya jika Anda memutuskan untuk menggunakan OPCache.Anda perlu menggunakan pustaka lain seperti APCu atau Yac yang keduanya menyimpan data dalam memori PHP bersama, atau beralih untuk menggunakan sesuatu seperti memcached, yang menyimpan data dalam memori dalam proses terpisah ke PHP.
Selain itu, OPcache tidak memiliki padanan dengan meter kemajuan pengunggahan yang ada di APC. Sebaliknya, Anda harus menggunakan Kemajuan Unggahan Sesi .
Pengaturan untuk OPcache
Dokumentasi untuk OPcache dapat ditemukan di sini dengan semua opsi konfigurasi yang tercantum di sini . Pengaturan yang disarankan adalah:
Jika Anda menggunakan pustaka atau kode yang menggunakan anotasi kode, Anda harus mengaktifkan simpan komentar:
sumber
Saya akan memasukkan dua sen saya untuk apa yang saya gunakan opcache.
Saya telah membuat kerangka kerja yang luas dengan banyak bidang dan metode validasi dan enum untuk dapat berbicara dengan basis data saya.
Tanpa opcache
Saat menggunakan skrip ini tanpa opcache dan saya mendorong 9000 permintaan dalam 2,8 detik ke server apache, maka maks. Keluar pada 90-100% cpu selama 70-80 detik hingga memenuhi semua permintaan.
Total time taken: 76085 milliseconds(76 seconds)
Dengan opcache diaktifkan
Dengan opcache diaktifkan, beroperasi pada waktu cpu 25-30% selama sekitar 25 detik dan tidak pernah melewati penggunaan cpu 25%.
Total time taken: 26490 milliseconds(26 seconds)
Saya telah membuat file blacklist opcache untuk menonaktifkan caching semua kecuali kerangka yang semuanya statis dan tidak perlu mengubah fungsionalitas. Saya memilih secara eksplisit untuk hanya file kerangka sehingga saya dapat mengembangkan tanpa khawatir tentang memuat ulang / memvalidasi file cache. Setelah semuanya di-cache menghemat satu detik dari total permintaan
25546 milliseconds
Ini secara signifikan memperluas jumlah data / permintaan saya dapat menangani per detik tanpa server bahkan berkeringat.
sumber
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;
Cukup ganti; dengan enter di file ini. Tapi inilah yang saya gunakan. sebagian besar barang bawaanopcache.revalidate_freq=60;
menentukan berapa lama file dapat hidup dalam memori dalam hitungan detik. ketika waktu habis itu mengkompilasi ulang file.opcache.revalidate_freq
kontrol seberapa sering skrip diperiksa untuk perubahan (berdasarkan apakah timestamp-nya berubah). Jadi jika stempel waktu skrip tetap sama dengan terakhir kali kompilasi, skrip tidak akan dikompilasi ulang. Semua ini dengan asumsi Anda belum mengubahopcache.validate_timestamps
pengaturan, yang diaktifkan secara default.Dengan PHP 5.6 di Amazon Linux (harus sama dengan RedHat atau CentOS):
dan kemudian restart apache.
sumber
Saya mengalami ini ketika mengatur moodle. Saya menambahkan baris berikut dalam file php.ini.
intl -> http://php.net/manual/en/book.intl.php
sumber
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146