Bagaimana saya bisa mengaktifkan preloading opcache di PHP 7.4?


9

Saya ingin mengaktifkan opcache preloading ( RFC ) di server produksi saya menggunakan PHP 7.4. Saya menggunakan Symfony , tetapi ini berlaku untuk semua PHP.


1
Tidak yakin seberapa banyak reddit.com/r/PHP/comments/e8pgzi/… akan memengaruhi rencana apa pun untuk menggunakannya.
Nigel Ren


1
Lihat artikel ini . Baca juga bug yang diposting Nigel, karena tampaknya cukup kritis untuk saat ini.
Jeto

Jawaban:


4

Pertama-tama Anda harus menambahkan:

opcache.preload=/path/to/project/preload.php

untuk Anda php.ini

Kemudian dalam skrip PHP Anda, Anda harus memasukkan opcache_compile_file($file);setiap file yang ingin Anda muat.


4

Menurut posting blog ini tampaknya sepele. Rupanya Symfony sejak 4.4 menghasilkan skrip preload yang harus diatur dalam php.ini:

opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php

Saya melakukan beberapa tes di lingkungan Docker lokal saya dan begini caranya:

PHP 7.3 tanpa OPcache (saat ini)

Requests per second:    8.75 [#/sec] (mean)
Time per request:       114.402 [ms] (mean)

PHP 7.4 tanpa OPcache

Requests per second:    11.44 [#/sec] (mean)
Time per request:       87.417 [ms] (mean)

PHP 7.4 dengan OPcache, tanpa preloading (Apache + modphp)

Requests per second:    30.25 [#/sec] (mean)
Time per request:       33.053 [ms]

PHP 7.4 dengan OPcache, tanpa preloading (nginx + php fpm)

Requests per second:    40.00 [#/sec] (mean)

Sayangnya saya tidak dapat mengaktifkan preloading :( Saya menemukan kesalahan berikut (di Apache + Mod dan Nginx + FPM):

double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)

Fitur ini terlihat seperti WIP . Saya akan memvalidasi ulang jawaban ini ketika saya dapat menggunakan hal preloading ini. Secara keseluruhan saya cukup terkesan, kinerja + 30% hanya dengan meningkatkan dari PHP 7.3ke7.4 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.