ฉันต้องการเปิดใช้งานการโหลดล่วงหน้า opcache ( RFC ) บนเซิร์ฟเวอร์ที่ใช้งานจริงด้วย PHP 7.4 ฉันใช้Symfonyแต่สิ่งนี้ใช้กับ PHP ทั้งหมด
ฉันต้องการเปิดใช้งานการโหลดล่วงหน้า opcache ( RFC ) บนเซิร์ฟเวอร์ที่ใช้งานจริงด้วย PHP 7.4 ฉันใช้Symfonyแต่สิ่งนี้ใช้กับ PHP ทั้งหมด
คำตอบ:
ก่อนอื่นคุณควรเพิ่ม:
opcache.preload=/path/to/project/preload.php
เพื่อคุณ php.ini
จากนั้นในสคริปต์ PHP ของคุณคุณควรผ่านopcache_compile_file($file);
แต่ละไฟล์ที่คุณต้องการโหลดไว้ล่วงหน้า
ตามโพสต์บล็อกนี้ดูเหมือนจะไม่สำคัญ เห็นได้ชัดว่า Symfony ตั้งแต่ 4.4 สร้างสคริปต์โหลดล่วงหน้าซึ่งจะต้องมีการตั้งค่าในphp.ini
:
opcache.preload=/path/to/project/var/cache/prod/App_KernelProdContainer.preload.php
ฉันทำการทดสอบบางอย่างในสภาพแวดล้อม Docker ท้องถิ่นของฉันและนี่คือวิธี:
PHP 7.3 ไม่มี OPcache (ปัจจุบัน)
Requests per second: 8.75 [#/sec] (mean)
Time per request: 114.402 [ms] (mean)
PHP 7.4 โดยไม่มี OPcache
Requests per second: 11.44 [#/sec] (mean)
Time per request: 87.417 [ms] (mean)
PHP 7.4 พร้อม OPcache โดยไม่มีการโหลดล่วงหน้า (Apache + modphp)
Requests per second: 30.25 [#/sec] (mean)
Time per request: 33.053 [ms]
PHP 7.4 พร้อม OPcache โดยไม่มีการโหลดล่วงหน้า (nginx + php fpm)
Requests per second: 40.00 [#/sec] (mean)
น่าเสียดายที่ฉันไม่สามารถเปิดใช้งานการโหลดล่วงหน้า :( ฉันพบข้อผิดพลาดต่อไปนี้ (ทั้ง Apache + Mod และ Nginx + FPM):
double free or corruption (!prev)
child pid 17 exit signal Aborted (6), possible coredump (…)
คุณลักษณะนี้ดูเหมือนWIPแม้ว่า ฉันจะตรวจสอบคำตอบนี้อีกครั้งเมื่อฉันสามารถใช้สิ่งที่โหลดล่วงหน้าได้ ในภาพรวมผมประทับใจมากประสิทธิภาพ + 30% โดยการอัพเกรดจาก PHP ไป7.3
7.4