PHP 5.5 đã được phát hành và nó có một mô-đun bộ đệm mã mới gọi là OPCache, nhưng dường như không có tài liệu nào cho nó.
Vậy tài liệu cho nó ở đâu và làm thế nào để tôi sử dụng OPcache?
PHP 5.5 đã được phát hành và nó có một mô-đun bộ đệm mã mới gọi là OPCache, nhưng dường như không có tài liệu nào cho nó.
Vậy tài liệu cho nó ở đâu và làm thế nào để tôi sử dụng OPcache?
Câu trả lời:
OpCache được biên dịch theo mặc định trên PHP5.5 +. Tuy nhiên, nó bị tắt theo mặc định. Để bắt đầu sử dụng OpCache trong PHP5.5 + trước tiên bạn sẽ phải kích hoạt nó. Để làm điều này, bạn sẽ phải làm như sau.
Thêm dòng sau vào php.ini
:
zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)
Lưu ý rằng khi đường dẫn chứa khoảng trắng, bạn nên bọc nó trong dấu ngoặc kép:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
Cũng lưu ý rằng bạn sẽ phải sử dụng lệnh zend_extension
thay vì lệnh "thông thường" extension
vì nó ảnh hưởng đến công cụ Zend thực tế (tức là thứ chạy PHP).
Hiện tại có bốn chức năng mà bạn có thể sử dụng:
opcache_get_configuration()
:Trả về một mảng chứa cấu hình hiện đang sử dụng mà OpCache sử dụng. Điều này bao gồm tất cả các cài đặt ini cũng như thông tin phiên bản và các tệp trong danh sách đen.
var_dump(opcache_get_configuration());
opcache_get_status()
:Điều này sẽ trả về một mảng với thông tin về trạng thái hiện tại của bộ đệm. Thông tin này sẽ bao gồm những thứ như: trạng thái của bộ đệm trong (được bật, khởi động lại, đầy đủ, v.v.), sử dụng bộ nhớ, lần truy cập, bỏ lỡ và một số thông tin hữu ích khác. Nó cũng sẽ chứa các tập lệnh được lưu trữ.
var_dump(opcache_get_status());
opcache_reset()
:Đặt lại toàn bộ bộ đệm. Có nghĩa là tất cả các tập lệnh được lưu trong bộ nhớ cache có thể sẽ được phân tích lại trong lần truy cập tiếp theo.
opcache_reset();
opcache_invalidate()
:Vô hiệu hóa một tập lệnh lưu trữ cụ thể. Có nghĩa là kịch bản sẽ được phân tích cú pháp một lần nữa trong lần truy cập tiếp theo.
opcache_invalidate('/path/to/script/to/invalidate.php', true);
Có một số GUI được tạo để giúp duy trì OpCache và tạo các báo cáo hữu ích. Những công cụ này tận dụng các chức năng trên.
OpCacheGUI
Tuyên bố miễn trừ trách nhiệm Tôi là tác giả của dự án này
Đặc trưng:
Ảnh chụp màn hình:
URL: https://github.com/PeeHaa/OpCacheGUI
tình trạng opcache
Đặc trưng:
Ảnh chụp màn hình:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
Đặc trưng:
Ảnh chụp màn hình:
Vì OPcache được thiết kế để thay thế mô-đun APC, nên không thể chạy chúng song song trong PHP. Điều này tốt cho việc lưu trữ mã opcode PHP vì không ảnh hưởng đến cách bạn viết mã.
Tuy nhiên, điều đó có nghĩa là nếu bạn hiện đang sử dụng APC để lưu trữ dữ liệu khác (thông qua apc_store()
chức năng), bạn sẽ không thể làm điều đó nếu bạn quyết định sử dụng OPCache.
Bạn sẽ cần phải sử dụng một thư viện như một trong hai APCu hoặc Yac mà cả hai lưu trữ dữ liệu trong bộ nhớ chia sẻ PHP, hoặc chuyển sang sử dụng một cái gì đó giống như memcached, mà lưu trữ dữ liệu trong bộ nhớ trong một quá trình riêng biệt để PHP.
Ngoài ra, OPcache không có giá trị tương đương với đồng hồ đo tiến độ tải lên có trong APC. Thay vào đó, bạn nên sử dụng Tiến trình tải lên phiên .
Tài liệu về OPcache có thể được tìm thấy ở đây với tất cả các tùy chọn cấu hình được liệt kê ở đây . Các cài đặt được đề xuất là:
; Sets how much memory to use
opcache.memory_consumption=128
;Sets how much memory should be used by OPcache for storing internal strings
;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8
; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000
;How often (in seconds) to check file timestamps for changes to the shared
;memory storage allocation.
opcache.revalidate_freq=60
;If enabled, a fast shutdown sequence is used for the accelerated code
;The fast shutdown sequence doesn't free each allocated block, but lets
;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1
;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1
Nếu bạn sử dụng bất kỳ thư viện hoặc mã nào sử dụng chú thích mã, bạn phải bật lưu ý kiến:
opcache.save_comments=1
Nếu bị tắt, tất cả các bình luận PHPDoc sẽ bị loại bỏ khỏi mã để giảm kích thước của mã được tối ưu hóa. Vô hiệu hóa "Nhận xét tài liệu" có thể phá vỡ một số ứng dụng và khung hiện có (ví dụ: Doctrine, ZF2, PHPUnit)
Tôi sẽ giảm hai xu cho những gì tôi sử dụng opcache.
Tôi đã thực hiện một khuôn khổ rộng lớn với nhiều trường và phương thức xác thực và enum để có thể nói chuyện với cơ sở dữ liệu của tôi.
Không có opcache
Khi sử dụng tập lệnh này mà không có opcache và tôi đẩy 9000 yêu cầu trong 2,8 giây đến máy chủ apache, nó đạt tối đa 90 - 100% cpu trong 70-80 giây cho đến khi bắt kịp tất cả các yêu cầu.
Total time taken: 76085 milliseconds(76 seconds)
Với opcache được kích hoạt
Với opcache được kích hoạt, nó chạy ở tốc độ 25-30% cpu trong khoảng 25 giây và không bao giờ vượt qua mức sử dụng cpu 25%.
Total time taken: 26490 milliseconds(26 seconds)
Tôi đã tạo một tệp danh sách đen opcache để vô hiệu hóa bộ nhớ đệm của tất cả mọi thứ ngoại trừ khung là tất cả tĩnh và không cần thay đổi chức năng. Tôi chọn rõ ràng chỉ các tệp khung để tôi có thể phát triển mà không phải lo lắng về việc tải lại / xác thực các tệp bộ đệm. Có tất cả mọi thứ được lưu trong bộ nhớ cache tiết kiệm một giây trên tổng số yêu cầu25546 milliseconds
Điều này mở rộng đáng kể lượng dữ liệu / yêu cầu tôi có thể xử lý mỗi giây mà không cần máy chủ thậm chí đổ mồ hôi.
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;
Chỉ cần thay thế; với một nhập trong tập tin ini. Nhưng đây là những gì tôi đã sử dụng. công cụ chủ yếu mặc định
opcache.revalidate_freq=60;
xác định thời gian một tập tin có thể sống trong bộ nhớ trong vài giây. khi hết thời gian, nó sẽ biên dịch lại tập tin.
opcache.revalidate_freq
kiểm soát tần suất kiểm tra tập lệnh thay đổi (dựa trên việc dấu thời gian của tập lệnh có thay đổi hay không). Vì vậy, nếu dấu thời gian của tập lệnh vẫn giống như lần trước khi nó được biên dịch, nó sẽ không được biên dịch lại. Tất cả điều này là giả sử bạn chưa thay đổi opcache.validate_timestamps
cài đặt, được bật theo mặc định.
Với PHP 5.6 trên Amazon Linux (nên giống với RedHat hoặc CentOS):
yum install php56-opcache
và sau đó khởi động lại apache.
Tôi gặp phải điều này khi thiết lập moodle. Tôi đã thêm các dòng sau trong tệp php.ini.
zend_extension=C:\xampp\php\ext\php_opcache.dll
[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0
; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487
; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps
extension=C:\xampp\php\ext\php_intl.dll
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146