Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Artikel yang menerangkan prinsip dan penggunaan PHP opcache secara terperinci

Artikel yang menerangkan prinsip dan penggunaan PHP opcache secara terperinci

藏色散人
藏色散人ke hadapan
2023-03-22 16:18:452065semak imbas

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.

Artikel yang menerangkan prinsip dan penggunaan PHP opcache secara terperinci

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

  • Tugaskan proses Worker untuk melaksanakan skrip PHP Jika tiada Worker terbiar, kembalikan ralat 502

  • The Worker (php. -cgi) proses melaksanakan skrip PHP Jika tamat masa , mengembalikan ralat 504

  • Pemprosesan selesai dan hasilnya dikembalikan

  • Langkah 5: PHP-FPM Worker => Master => ; Nginx

Proses PHP-FPM Worker mengembalikan hasil pemprosesan, menutup sambungan dan menunggu permintaan seterusnya

  • Induk PHP-FPM Proses mengembalikan hasil pemprosesan melalui Soket

  • Pengendali Nginx menghantar setiap penimbal respons ke penapis pertama secara berurutan → kedua → dan seterusnya → respons akhir dihantar kepada klien

  • 1.2 Mekanisme tafsiran dan pelaksanaan skrip PHP

    Selepas memahami aliran pemprosesan keseluruhan PHP + Nginx, mari kita lihat aliran pelaksanaan khusus skrip PHP Mula-mula, mari kita lihat contoh:

Mari kita analisa proses pelaksanaan:

1. .php memulakan pautan pelaksanaan, memulakan enjin Zend dan memuatkan modul sambungan berdaftar
<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

    APC: Alternatif PHP Cache ialah komponen caching opcode PHP yang terbuka dan percuma, digunakan untuk cache dan mengoptimumkan kod perantaraan PHP ia tidak lagi dikemas kini dan tidak disyorkan
  • APCu: Ia adalah cawangan APC, berkongsi memori, cache data pengguna, tidak boleh cache opcode, dan boleh digunakan dengan Opcache
  • eAccelerate: juga tidak dikemas kini , tidak disyorkan
  • xCache: tidak disyorkan lagi
  • 2. Pengenalan kepada OPCache

  • OPCache dikeluarkan secara rasmi oleh Zend dan dibuka Sambungan cache opcode percuma juga mempunyai fungsi pengoptimuman kod, menghapuskan overhed memuatkan dan menghuraikan skrip PHP setiap kali. Sambungan OPcache telah digabungkan dalam PHP 5.5.0 dan versi seterusnya.
Cache dua jenis kandungan:

OPCode


    Interned String, seperti ulasan, nama pembolehubah, dll.
  • 3.1 Memori Dikongsi
  • 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.

    4. Tafsiran cache OPCache

    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:

      Fungsi yang terlibat dalam skrip PHP
    • Kelas ditakrifkan dalam skrip PHP
    • laluan fail skrip PHP
    • skrip PHP OPArray
    • Struktur/kandungan PHP sendiri
    • 4.2 Interned String

    Caching Mula-mula 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 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.


    5. Strategi kemas kini OPCache

    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?

      Jangan keluarkan kod semasa tempoh puncak, ini adalah peraturan yang mesti dipatuhi dalam apa jua keadaan
    • Memanaskan kod, seperti menggunakan penyahpepijatan kelompok skrip mengakses URL, atau menggunakan API yang didedahkan oleh OPCache seperti opcache_compile_file() untuk penyusunan dan caching
    6

    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!

Kenyataan:
Artikel ini dikembalikan pada:juejin.im. Jika ada pelanggaran, sila hubungi admin@php.cn Padam