ฉันจะเปิดใช้งานการโหลดล่วงหน้า opcache ใน PHP 7.4 ได้อย่างไร


9

ฉันต้องการเปิดใช้งานการโหลดล่วงหน้า opcache ( RFC ) บนเซิร์ฟเวอร์ที่ใช้งานจริงด้วย PHP 7.4 ฉันใช้Symfonyแต่สิ่งนี้ใช้กับ PHP ทั้งหมด


1
ไม่แน่ใจว่าreddit.com/r/PHP/comments/e8pgzi/…จะมีผลกับแผนการใช้งานใด ๆ
Nigel Ren


1
ตรวจสอบบทความนี้ นอกจากนี้อ่านข้อผิดพลาดที่ไนเจลโพสต์ด้วยเนื่องจากดูเหมือนว่าจะค่อนข้างสำคัญสำหรับตอนนี้
Jeto

คำตอบ:


4

ก่อนอื่นคุณควรเพิ่ม:

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

เพื่อคุณ php.ini

จากนั้นในสคริปต์ PHP ของคุณคุณควรผ่านopcache_compile_file($file);แต่ละไฟล์ที่คุณต้องการโหลดไว้ล่วงหน้า


4

ตามโพสต์บล็อกนี้ดูเหมือนจะไม่สำคัญ เห็นได้ชัดว่า 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.37.4

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.