Rumah > Artikel > pembangunan bahagian belakang > Artikel yang menerangkan prinsip dan penggunaan PHP opcache secara terperinci
Artikel ini membawakan anda pengetahuan yang berkaitan tentang opcache PHP terutamanya bercakap tentang cara memahami fungsi OPCache dan cara menggunakannya Rakan-rakan yang berminat boleh melihatnya bersama-sama.
Dalam projek PHP, terutamanya dalam senario dengan konkurensi yang tinggi dan trafik yang besar, cara meningkatkan masa tindak balas PHP adalah tugas yang sangat penting.
Opcache ialah komponen yang sangat diperlukan untuk mengoptimumkan prestasi PHP, terutamanya dalam projek yang menggunakan rangka kerja PHP.
1. Gambaran Keseluruhan
Sebelum memahami fungsi OPCache, kita perlu memahami mekanisme kerja PHP-FPM + Nginx dan mekanisme tafsiran dan pelaksanaan skrip PHP.
1.1 Mekanisme kerja PHP-FPM + Nginx
Permintaan pergi dari pelayar web ke Nginx, dan kemudian ke pemprosesan PHP Terdapat lima langkah:
Bab Langkah satu: Mulakan perkhidmatan
Mulakan PHP-FPM. PHP-FPM menyokong dua mod komunikasi: soket TCP dan soket Unix;
PHP-FPM akan memulakan dua jenis proses: Proses induk dan proses Worker; peruntukan Tugas dan pengurusan Proses pekerja; yang terakhir ialah program cgi PHP, yang bertanggungjawab untuk mentafsir, menyusun dan melaksanakan skrip PHP.
Mulakan Nginx. Pertama, modul ngx_http_fastcgi_module akan dimuatkan untuk memulakan persekitaran pelaksanaan FastCGI dan melaksanakan proksi permintaan protokol FastCGI
Nota di sini: proses pekerja fastcgi (proses cgi) diuruskan oleh PHP-FPM . Bukan Nginx. Nginx hanyalah proksi
Langkah 2: Request => Nginx
Nginx menerima permintaan dan mengkonfigurasinya berdasarkan di lokasi , pilih pengendali yang sesuai
Berikut ialah pengendali untuk proksi PHP
Langkah 3: Nginx => FPM
Nginx menterjemah permintaan ke dalam permintaan fastcgi
menghantarnya ke proses induk PHP-FPM melalui soket TCP/ Unix Socket
Langkah 4: PHP-FPM Master => request
Langkah 5: PHP-FPM Worker => Master => ; Nginx
Proses PHP-FPM Worker mengembalikan hasil pemprosesan, menutup sambungan dan menunggu permintaan seterusnya
<p><?php <br> if (!empty($_POST)) {<br> echo "Response Body POST: ", json_encode($_POST), "\n";<br> }<br> if (!empty($_GET)) { <br> echo "Response Body GET: ", json_encode($_GET), "\n";<br> }<br></p>2 Baca skrip selepas fail permulaan, enjin Zend melakukan analisis leksikal (lex), analisis sintaks (bison) pada fail skrip, dan menjana pepohon sintaks
3 Enjin Zend menyusun pepohon sintaks dan menjana opcode, 4 Enjin Zend melaksanakan opcode dan mengembalikan hasil pelaksanaan
Dalam mod cli PHP, setiap kali. skrip PHP dilaksanakan, empat langkah akan dilaksanakan mengikut turutan; )~4) mesti dilaksanakan sekali untuk setiap permintaan;
Malah, pokok sintaks dan opcode yang dijana oleh langkah 2) dan 3), skrip PHP yang sama akan mempunyai hasil yang sama setiap kali ia dijalankan , dalam PHP -Mod FPM, setiap permintaan mesti diproses sekali, yang merupakan pembaziran besar sumber sistem Jadi adakah terdapat cara untuk mengoptimumkannya?
Sudah tentu, seperti:
OPCache: dahulunya dikenali sebagai Zend Optimizer+, ia adalah komponen sumber terbuka Pelayan Zend, sangat disyorkan
OPCode
Sistem UNIX/Linux menyediakan banyak cara untuk berkongsi memori antara proses:
1 System-V shm API: Sistem V shared memory
sysv shm adalah berterusan melainkan dinyatakan secara eksplisit oleh proses yang dipadamkan, sebaliknya. ia akan sentiasa wujud dalam memori sehingga sistem dimatikan;
2.mmap API:
Memori yang dipetakan oleh mmap tidak berterusan. pemetaan Ia akan menjadi tidak sah serta-merta melainkan ia telah dipetakan ke fail terlebih dahulu
Mekanisme pemetaan memori mmap ialah panggilan sistem standard POSIX, dan terdapat dua jenis: pemetaan tanpa nama dan pemetaan fail
Salah satu kelebihan mmap ialah ia memetakan fail ke ruang alamat proses
mengelakkan proses penyalinan data daripada penimbal pengguna ke penimbal cache halaman kernel;
Sudah tentu, kelebihan lain ialah panggilan sistem baca/tulis yang kerap tidak diperlukan
3. API POSIX:
Memori kongsi Sistem V adalah Lapuk, memori kongsi POSIX menyediakan API yang lebih mudah digunakan dan direka bentuk dengan lebih rasional.
4 Unix socket API menggunakan tiga mekanisme memori kongsi pertama, bergantung pada konfigurasi atau mod perkongsian memori mmap lalai. Mengikut senario caching bytecode PHP, reka bentuk pengurusan memori OPCache adalah sangat mudah, dengan membaca dan menulis pantas, tiada pelepasan memori, dan data tamat tempoh ditetapkan kepada Wasted.
Apabila memori yang terbuang lebih besar daripada nilai yang ditetapkan, mekanisme OPCache dimulakan semula secara automatik, cache dikosongkan dan dijana semula.
3.2 Kunci Mutex
Sebarang pengendalian sumber memori melibatkan mekanisme kunci.
Memori dikongsi: Hanya satu proses dibenarkan untuk melaksanakan operasi tulis dalam satu unit masa, dan berbilang proses dibenarkan untuk melaksanakan operasi baca semasa operasi menulis dilakukan, operasi baca tidak disekat, sehingga jarang berlaku penguncian; keadaan atas.Ini membawa kepada masalah lain: kod baharu, senario trafik yang besar, proses beratur untuk melaksanakan operasi opcode cache yang membawa kepada pembaziran sumber.
OPCache ialah penyelesaian cache Opcode rasmi Selepas versi PHP5.5, ia telah dibungkus ke dalam kod sumber PHP dan dikeluarkan bersama .
Ia menyimpan kod bait dan data yang dijana oleh kompilasi PHP ke dalam memori kongsi Pada setiap permintaan, kod op yang disusun dibaca terus daripada cache dan dilaksanakan.Tingkatkan kecekapan berjalan PHP dengan menyimpan proses penyusunan skrip. Jika anda menggunakan sambungan APC untuk melakukan kerja yang sama, kini amat disyorkan untuk menggunakan OPCache sebaliknya, terutamanya dalam PHP7.
4.1 OPCode
Cache Opcache akan cache OPCode dan kandungan berikut:
Dalam PHP5.4, mekanisme Interned String telah diperkenalkan untuk mengoptimumkan penyimpanan dan pemprosesan rentetan PHP. Terutama apabila berurusan dengan blok rentetan yang besar, seperti doces PHP, Interned String boleh mengoptimumkan memori. Kandungan cache String Interned termasuk: nama pembolehubah, nama kelas, nama kaedah, rentetan, ulasan, dsb.
Dalam mod PHP-FPM, aksara cache String Interned dihadkan kepada dalam proses Worker. Jika dicache dalam OPCache, rentetan cache Interned String boleh digunakan antara proses Worker untuk menjimatkan memori.
Kita perlu memberi perhatian kepada satu perkara Dalam pembangunan PHP, biasanya terdapat komen yang besar, yang juga akan dicache dalam OPCache. Caching komen boleh dimatikan melalui konfigurasi php.ini.
Walau bagaimanapun, dalam rangka kerja seperti Zend Framework, ulasan akan dirujuk, jadi sama ada untuk mematikan cache ulasan perlu dilayan secara berbeza.ialah cache, yang mempunyai strategi tamat tempoh dan kemas kini. Strategi kemas kini OPCache adalah sangat mudah Data tamat tempoh ditetapkan kepada Terbuang Apabila nilai yang ditetapkan dicapai, cache dikosongkan dan cache dibina semula.
Nota di sini: Dalam senario trafik tinggi, membina semula cache adalah tugas yang sangat memakan sumber. OPCache tidak menghalang proses lain daripada membaca apabila mencipta cache. Ini mengakibatkan sejumlah besar proses berulang kali mencipta cache baharu. Oleh itu, jangan tetapkan masa tamat tempoh OPCache
Setiap kali kod baharu dikeluarkan, cache akan dibuat berulang kali. Bagaimana untuk mengelakkannya?
6.1 Konfigurasi memori
opcache.preferred_memory_model="mmap" Modul memori pilihan OPcache. Jika dibiarkan kosong, OPcache akan memilih modul yang berkenaan Biasanya, pemilihan automatik sudah memadai. Nilai pilihan termasuk: mmap, shm, posix dan win32.
opcache.memory_consumption=64 OPcache saiz memori kongsi dalam megabait, lalai 64M
opcache.interned_strings_buffer=4 Gunakan saiz memori untuk menyimpan rentetan sementara , dalam megabait, lalai 4M
opcache.max_wasted_percentage=5 Had atas memori terbuang, dalam peratusan. Jika had ini dicapai, OPcache akan menjana acara mulakan semula. Lalai 5
6.2 Bilangan dan saiz fail yang dibenarkan untuk dicache
opcache.max_accelerated_files=2000 Had atas bilangan fail skrip yang boleh disimpan dalam jadual cincang OPcache. Nilai sebenar ialah nombor perdana pertama yang terdapat dalam set nombor perdana {223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987} yang lebih besar daripada atau sama dengan nilai yang ditetapkan. Julat nilai minimum nilai tetapan ialah 200, nilai maksimum ialah 100000 sebelum PHP 5.5.6 dan 1000000 selepas PHP 5.5.6. Nilai lalai 2000
opcache.max_file_size=0 Saiz fail cache maksimum dalam bait. Tetapkan kepada 0 untuk cache semua fail. Lalai 0
6.3 Cache berkaitan ulasan
opcache.load_commentsboolean Jika dilumpuhkan, ini tidak akan dimuatkan walaupun fail mengandungi kandungan Anotasi ulasan. Pilihan ini boleh digunakan bersama-sama dengan opcache.save_comments untuk memuatkan kandungan ulasan atas permintaan.
opcache.fast_shutdown boolean Jika didayakan, acara sambung henti pantas akan digunakan. Apa yang dipanggil acara penyambungan semula henti cepat merujuk kepada modul pengurusan memori yang bergantung pada enjin Zend untuk melepaskan memori semua pembolehubah yang diminta sekaligus, dan bukannya melepaskan setiap blok memori yang diperuntukkan dalam urutan.
6.4 Konfigurasi cache peringkat kedua
opcache.file_cache Konfigurasikan direktori cache peringkat kedua dan dayakan cache peringkat kedua. Mendayakan cache peringkat kedua boleh meningkatkan prestasi apabila memori SHM penuh, pelayan dimulakan semula atau SHM ditetapkan semula. Nilai lalai ialah rentetan kosong "", yang melumpuhkan caching berasaskan fail.
opcache.file_cache_onlyboolean Mendayakan atau melumpuhkan caching opcode dalam memori kongsi.
opcache.file_cache_consistency_checksboolean Sama ada untuk mengesahkan jumlah semak fail semasa memuatkan skrip daripada cache fail.
opcache.file_cache_fallbackboolean Pada platform Windows, apabila proses tidak dapat dilampirkan pada memori kongsi, caching berasaskan fail digunakan, iaitu: opcache.file_cache_only=1. Caching fail perlu didayakan secara eksplisit.
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Artikel yang menerangkan prinsip dan penggunaan PHP opcache secara terperinci. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!