Rumah > Artikel > pembangunan bahagian belakang > Analisis mendalam tentang cara PHP Opcache berfungsi
Dalam projek PHP, terutamanya dalam senario dengan konkurensi yang tinggi dan trafik yang besar, cara untuk 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.
Sebelum memahami fungsi OPCache, kita perlu memahami PHP-FPM The mekanisme kerja Nginx , dan mekanisme tafsiran dan pelaksanaan skrip PHP.
1.1 PHP-FPM Mekanisme kerja Nginx
Permintaan diproses dari pelayar web ke Nginx, dan kemudian ke PHP keseluruhan proses adalah seperti berikut Lima langkah:
Langkah pertama: Mulakan perkhidmatan
Langkah 2: Permintaan => Nginx
Langkah 3: Nginx => PHP-FPM
Langkah 4: PHP-FPM Master => >
Proses PHP-FPM Worker mengembalikan hasil pemprosesan dan menutup sambungan Menunggu permintaan seterusnya
1.2 Mekanisme penjelasan dan pelaksanaan skrip PHP Setelah memahami aliran pemprosesan keseluruhan PHP Nginx, kita Seterusnya, mari kita lihat proses pelaksanaan khusus skrip PHP
Pertama, mari kita lihat contoh:
Mari kita analisa proses pelaksanaan:
php memulakan pautan pelaksanaan, memulakan enjin Zend dan memuatkan modul sambungan berdaftar
Baca fail skrip selepas permulaan, enjin Zend melakukan analisis leksikal (lex), analisis sintaks (bison) pada fail skrip, menjana pokok sintaks
Enjin Zend menyusun pokok sintaks, menjana opcode,
Enjin Zend Laksanakan opcode dan kembalikan hasil pelaksanaan
Dalam mod cli PHP, setiap kali skrip PHP dilaksanakan, empat langkah akan dilaksanakan dalam urutan;
Dalam mod PHP-FPM, langkah 1) dilaksanakan sekali apabila PHP-FPM dimulakan dan tidak akan dilaksanakan dalam langkah 2)~4) dilaksanakan sekali untuk setiap permintaan;
Malah, pokok sintaks dan opcode yang dijana dalam langkah 2) dan 3), hasil skrip PHP yang sama adalah sama setiap kali ia dijalankan,
dalam mod PHP-FPM Seterusnya, setiap permintaan mesti diproses semula, yang merupakan pembaziran besar sumber sistem Jadi adakah ada cara untuk mengoptimumkannya?
Sudah tentu, seperti:
OPCache ialah sambungan cache opcode yang terbuka dan percuma yang dihasilkan secara rasmi oleh Zend Ia juga mempunyai fungsi pengoptimuman kod, menghapuskan overhed pemuatan dan penghuraian skrip PHP setiap kali.
Pelanjutan OPcache telah digabungkan dalam PHP 5.5.0 dan versi seterusnya.
Cache dua jenis kandungan:
Mekanisme utama caching OPCache ialah: Letakkan opcode yang dikompilasi ke dalam memori kongsi dan sediakan untuk proses lain untuk mengakses.
Ini melibatkan mekanisme perkongsian memori Selain itu, semua operasi sumber memori mempunyai isu penguncian.
3.1 Memori Dikongsi
Sistem UNIX/Linux menyediakan banyak cara untuk berkongsi memori antara proses:
Apabila memori Terbuang lebih besar daripada nilai yang ditetapkan, mekanisme OPCache dimulakan semula secara automatik, cache dikosongkan dan dijana semula.
3.2 Kunci Mutex
Sebarang operasi 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 Operasi tulis dilakukan pada masa yang sama dan baca operasi tidak disekat, jadi terdapat sangat sedikit keadaan terkunci.
Ini membawa kepada masalah lain: kod baharu, senario trafik yang besar, proses beratur untuk melaksanakan operasi opcode cache yang membawa kepada pembaziran sumber;
4. Tafsiran cache OPCacheOPCache ialah penyelesaian cache Opcode rasmi Selepas versi PHP5.5, ia telah dibungkus ke dalam kod sumber PHP dan dikeluarkan bersama .
Jika anda menggunakan sambungan APC untuk melakukan kerja yang sama, kini amat disyorkan untuk menggunakan OPCache, terutamanya dalam PHP7.
4.1 OPCode cache
Opcache akan cache OPCode dan kandungan berikut: 4.2 Interned String cache Pertama sekali kita perlu faham, apakah Interned String? Dalam PHP5.4, mekanisme Interned String telah diperkenalkan untuk mengoptimumkan penyimpanan dan pemprosesan rentetan PHP. Terutama apabila berurusan dengan ketulan rentetan yang besar, seperti doces PHP, Interned String boleh mengoptimumkan memori. Rentetan Intern Kandungan cache termasuk: Nama pembolehubah, nama kelas, nama kaedah, rentetan, ulasan , dsb. Dalam mod PHP-FPM, aksara cache String Interned dihadkan kepada dalam proses Worker. Dan cache dalam OPCache, maka rentetan cache Interned String boleh digunakan antara proses Worker untuk menjimatkan memori. Kita perlu memberi perhatian kepada satu perkara Dalam pembangunan PHP, biasanya terdapat bahagian besar komen, yang juga akan dicache dalam OPCache. Anda boleh mematikan caching komen melalui konfigurasi php.ini. Walau bagaimanapun, dalam rangka kerja seperti Zend Framework, akan merujuk ulasan, 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 akan menyebabkan sejumlah besar proses mencipta cache baharu berulang kali. Oleh itu, Jangan tetapkan masa tamat OPCache Setiap kali kod baharu dikeluarkan, cache akan dibuat berulang kali. Bagaimana untuk mengelakkannya? 6.1 Konfigurasi Memori 6.2 Nombor dan saiz fail yang dibenarkan untuk dicache 6.3 Cache berkaitan anotasi 6.4 Konfigurasi cache tahap kedua Pembelajaran yang disyorkan: "Tutorial Video PHP"
5. Strategi kemas kini OPCache
opcache_compile_file()
untuk penyusunan dan caching 6. Konfigurasi OPCache
opcache.preferred_memory_model="mmap"
OPcache modul memori pilihan. 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
Saiz memori kongsi OPcache, dalam megabait, lalai 64M
opcache.interned_strings_buffer=4
Saiz memori digunakan untuk menyimpan rentetan sementara, dalam Unit megabait, lalai 4M
opcache.max_wasted_percentage=5
Had atas memori terbuang, dalam peratusan. Jika had ini dicapai, OPcache akan menjana acara mulakan semula. Lalai5
opcache.max_accelerated_files=2000
Jadual cincang OPcache Bilangan maksimum fail skrip yang boleh disimpan. 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. Nilai minimum julat 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 maksimum cache dalam bait. Tetapkan kepada 0 untuk cache semua fail. Lalai 0
opcache.load_comments
boolean
Jika dilumpuhkan, walaupun fail mengandungi ulasan, ulasan ini tidak akan dimuatkan. Pilihan ini boleh digunakan bersama opcache.save_comments
untuk memuatkan kandungan anotasi atas permintaan. opcache.fast_shutdown
boolean Jika didayakan, acara penyambungan 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.
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_only
boolean
Dayakan atau lumpuhkan caching opcode dalam memori kongsi. opcache.file_cache_consistency_checks
boolean
Sama ada hendak mengesahkan jumlah semak fail semasa memuatkan skrip daripada cache fail. opcache.file_cache_fallback
boolean
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.
Atas ialah kandungan terperinci Analisis mendalam tentang cara PHP Opcache berfungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!