Làm cách nào tôi có thể kích hoạt tải trước opcache trong PHP 7.4?


9

Tôi muốn kích hoạt tải trước opcache ( RFC ) trên các máy chủ sản xuất của mình bằng PHP 7.4. Tôi đang sử dụng Symfony , nhưng điều này áp dụng cho tất cả PHP.


1
Không chắc chắn bao nhiêu reddit.com/r/PHP/comments/e8pgzi/ sẽ ảnh hưởng đến bất kỳ kế hoạch sử dụng nó.
Nigel Ren


1
Kiểm tra bài viết này . Cũng đọc lỗi mà Nigel đăng, vì nó có vẻ khá quan trọng trong thời điểm hiện tại.
Jeto

Câu trả lời:


4

Trước hết bạn nên thêm:

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

cho bạn php.ini

Sau đó, trong tập lệnh PHP của bạn, bạn nên chuyển vào opcache_compile_file($file);từng tệp bạn muốn tải trước.


4

Theo bài viết trên blog này dường như là tầm thường. Rõ ràng Symfony kể từ 4.4 tạo ra một kịch bản tải trước phải được đặt trong php.ini:

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

Tôi đã thực hiện một số thử nghiệm trong môi trường Docker cục bộ của mình và đây là cách nó diễn ra:

PHP 7.3 không có OPcache (hiện tại)

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

PHP 7.4 không có OPcache

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

PHP 7.4 với OPcache, không tải trước (Apache + modphp)

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

PHP 7.4 với OPcache, không tải trước (nginx + php fpm)

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

Thật không may, tôi không thể kích hoạt tải trước :( Tôi gặp phải các lỗi sau (trong cả Apache + Mod và Nginx + FPM):

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

Tính năng này trông giống như một WIP mặc dù. Tôi sẽ xác nhận lại câu trả lời này khi tôi có thể sử dụng thứ tải trước này. Nhìn chung, tôi khá ấn tượng, hiệu suất + 30% chỉ bằng cách nâng cấp từ PHP 7.3lên 7.4.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.