Saya ingin mengaktifkan opcache preloading ( RFC ) di server produksi saya menggunakan PHP 7.4. Saya menggunakan Symfony , tetapi ini berlaku untuk semua PHP.
Saya ingin mengaktifkan opcache preloading ( RFC ) di server produksi saya menggunakan PHP 7.4. Saya menggunakan Symfony , tetapi ini berlaku untuk semua PHP.
Jawaban:
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.
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.3
ke7.4
.