OPCache là gì?
OPCache là một hệ thống caching (lưu các nội dụng trong bộ nhớ để dùng lại) nhằm tăng tốc độ website chạy bằng PHP. Với OPcache trong PHP là lưu trữ mã máy là các đoạn code PHP sau khi được biên dịch, nó lưu trong bộ nhớ chia sẻ đọc lại được giữa các truy vấn.
Bằng cách lưu trữ như vậy, các PHP Script (code PHP) không cần thiết phải biên dịch lại cho mỗi truy nhập - mã nó thi hành ngay mã đã biên dịch đọc được từ bộ nhớ. Điều này làm cho Website chạy PHP có tốc độ cải thiện rất nhiều, giảm tải đáng kể cho Server.
Từ PHP 5.5 mặc định đã có OPCache (là một extension của PHP) bạn chỉ việc kích hoạt và cấu hình
để sử dụng. Có những hệ thống PHP (như tự biện dịch, phiên bản cũ) có thể thiếu OPCache,
thì bạn cài vào bằng lệnh pecl
Bạn nên biết, sau khi website PHP của bạn hoàn thành viết code, để server thực thi code đó, nó sẽ phải đọc các file PHP, biên dịch thành mã máy rồi thi hành. Đọc và biên dịch mã nguồn PHP xảy ra cho mọi truy vấn, dẫn tới nhiều vấn đề về hiệu năng của website. Khi OPcache được kích hoạt việc biên dịch chỉ xảy ra lần đầu hoặc khi code php được cập nhật mới.
Cách thức OPCache hoạt động
Khi một đoạn code PHP (file .php) được yêu cầu thi hành , nó cần được đọc để phân tích cú pháp, biên dịch thành mã máy, từ đó mã máy được thực thi. Nếu OPCache hoạt động thì quá trình này diễn ra như sau: Tìm trong bộ nhớ xem có lưu trữ file PHP đã biên dịch
- Nếu chưa có, thì biên dịch mã nguồn - kết quả lưu vào bộ nhớ chia sẻ, sau đó chạy code
- Nếu đã có, chạy code luôn (chú ý nếu đã có nhưng file PHP đã cập nhật mới thì nó cũng sẽ biên dịch lại)
Cài đặt OpCache PHP
Mặc định OpCache là một extension có sẵn, bạn chỉ việc kích hoặt nó, để kích hoặt
bạn thêm vào php.ini
zend_extension=opcache.so opcache.enable = 1
Nếu đã kích hoạt thành công thì hàm phpinfo()
có chứa thông tin như dưới
Nếu chạy từ dòng lệnh xem version php thì kết quả
php -v
Nếu OpCache không kích hoạt được do thiếu extension này thì cài thêm vào bằng lệnh
pecl install opcache
Cấu hình OpCache
Các tham số thiết lập OpCache bạn viết trong file php.ini, chú ý nếu sử dụng PHP-FPM sau khi cập nhật php.ini bạn cần khởi động lại PHP-FPM
systemctl restart php-fpm
Ví dụ đây là một cấu hình viết trong php.ini:
opcache.enable_cli = 1
Một số cấu hình bạn có thể thiết lập (đầy đủ tại opcache configuration)
opcache.enable | Giá trị "1" kích hoặt OpCache, "0" tắt |
opcache.interned_strings_buffer=8 | Tổng bộ nhớ (MB) lưu trữ các chuỗi khác nhau |
opcache.max_accelerated_files=2000 | Tổng số file php có thể biên dịch và lưu trữ trong OPCache |
opcache.memory_consumption=64 | Tổng số file php có thể biên dịch và lưu trữ trong OPCache |
opcache.memory_consumption=128 | Bộ nhớ (MB) dùng bởi OPCache |
opcache.revalidate_freq=10 | Khoảng thời gian (giây) kiểm tra xem file PHP có cập nhật code mới không |
OPcache GUI
Có một PHP Script tạo ra giao diện GUI để bạn dễ theo dõi các thiết lập, reset lại cache ... Bạn tải file PHP này về, và chạy để dễ quản lý OPcache OPcache GUI
OPcache trong code PHP
Nếu OPcache kích hoạt, thì trong code PHP bạn được cung cấp một số phương thức như để xem tình trạng opcache, kiểm tra một file PHP có nằm trong OpCache không, hoặc để reset lại toàn bộ cache. Tất nhiên những phương thức này thông thường bạn không cần sử dụng
opcache_compile_file(string $filename): bool
yêu cầu biên dịch một file PHP và đưa vào OpCacheopcache_get_configuration(): array|false
lấy mảng chứa các cấu hình đang thiết lậpopcache_get_status(): array|false
lấy mảng chứa trang thái Opcache, như bộ nhớ, số file ...opcache_reset()
- reset để cache lại tất cảopcache_is_script_cached(string $filename): bool
- Kiểm tra một file có nằm trong OPCache