Tìm kiếm trang web

Cài đặt PHP OPcache trên Rocky/Alma/CentOS 9|8


OPcache được thiết kế để cải thiện hiệu suất của PHP bằng cách lưu trữ bytecode kịch bản đã biên dịch sẵn trong bộ nhớ chia sẻ. Bằng cách lưu trữ các kịch bản PHP trong bộ nhớ, nó loại bỏ nhu cầu PHP phải tải và phân tích các kịch bản cho mỗi yêu cầu nhận được. Khi lưu trữ các trang web hoặc ứng dụng web được xây dựng bằng PHP, việc sử dụng OPcache sẽ nâng cao đáng kể khả năng phản hồi và thời gian tải chung.

Đây là cách PHP OPcache hoạt động:

  1. Biên dịch kịch bản: OPcache biên dịch một kịch bản được yêu cầu thành mã byte.
  2. Bộ nhớ đệm Bytecode: Khi đã được biên dịch, bytecode được lưu trữ trong bộ nhớ chia sẻ để truy cập nhanh hơn.
  3. Thực thi các yêu cầu tiếp theo: Lần sau khi nhận được yêu cầu cho cùng một script, bytecode đã được lưu trong bộ nhớ đệm sẽ được sử dụng, do đó bỏ qua bước biên dịch và dẫn đến việc thực thi nhanh hơn.

Tóm lại, bằng cách sử dụng OPcache, bạn sẽ trải nghiệm thời gian thực thi các script PHP nhanh hơn, giảm tải cho CPU và bộ nhớ, và cải thiện khả năng mở rộng của hệ thống vì nó có thể xử lý nhiều yêu cầu đồng thời hơn.

Vậy làm thế nào để bạn cài đặt và cấu hình PHP OPcache trên hệ thống Rocky Linux/AlmaLinux và CentOS Stream 9|8. Hãy theo dõi để biết cách thực hiện.

Chuyển sang phiên bản PHP từ REMI

Chúng ta chỉ có thể kích hoạt OPcache trên hệ thống đã cài đặt PHP. Các hệ thống được đề cập cung cấp nhiều phiên bản PHP trong kho AppStream. Nhưng Opcache được cung cấp trong kho REMI.

Để kiểm tra xem PHP đã được cài đặt hay chưa, hãy thực hiện lệnh:

$ php --version
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies

Từ hệ thống của tôi, chúng tôi có thể xác nhận phiên bản là 8.2. Vì vậy, chúng ta có thể đặt lại mô-đun PHP.

sudo dnf module reset php -y

Tiếp theo, chúng ta cài đặt kho RPM của Remi:

  • Enterprise Linux 9 – (Rocky/Alma/CentoS Stream 9)
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
  • Enterprise Linux 8 – (Rocky/Alma/CentoS Stream 8)
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Trình cài đặt sẽ tự động thiết lập kho EPEL như một phụ thuộc. Để xác nhận REMI đang hoạt động, hãy chạy:

$ sudo dnf -y repolist
repo id                                                                                 repo name
appstream                                                                               Rocky Linux 8 - AppStream
baseos                                                                                  Rocky Linux 8 - BaseOS
epel                                                                                    Extra Packages for Enterprise Linux 8 - x86_64
extras                                                                                  Rocky Linux 8 - Extras
remi-modular                                                                            Remi's Modular repository for Enterprise Linux 8 - x86_64
remi-safe                                                                               Safe Remi's RPM repository for Enterprise Linux 8 - x86_64

Tất cả các mô-đun PHP có thể được kiểm tra bằng cách chạy lệnh sau:

 dnf module list php

Đây là kết quả mẫu:

Rocky Linux 8 - AppStream
Name                                        Stream                                              Profiles                                                          Summary
php                                         7.2 [d][x]                                          common [d], devel, minimal                                        PHP scripting language
php                                         7.3 [x]                                             common [d], devel, minimal                                        PHP scripting language
php                                         7.4 [x]                                             common [d], devel, minimal                                        PHP scripting language
php                                         8.0 [x]                                             common [d], devel, minimal                                        PHP scripting language
php                                         8.2 [x]                                             common [d], devel, minimal                                        PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                                        Stream                                              Profiles                                                          Summary
php                                         remi-7.2 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-7.3 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-7.4 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-8.0 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-8.1 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-8.2 [x]                                        common [d], devel, minimal                                        PHP scripting language
php                                         remi-8.3 [x]                                        common [d], devel, minimal                                        PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Bây giờ, kích hoạt module PHP cụ thể từ REMI. Từ kết quả trước đó, PHP đã được cài đặt là 8.2, điều này có nghĩa là chúng ta nên kích hoạt module php:remi-8.2.

sudo dnf module install php:remi-8.2 -y

Trong hầu hết các trường hợp, nó sẽ nâng cấp phiên bản PHP đã cài đặt của bạn chứ không gỡ bỏ các gói.

Dependencies resolved.
==============================================================================================================================================================================================================================
 Package                                               Architecture                                   Version                                                      Repository                                            Size
==============================================================================================================================================================================================================================
Upgrading:
 php-cli                                               x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         5.5 M
 php-common                                            x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         1.3 M
 php-fpm                                               x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         1.9 M
 php-mbstring                                          x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         583 k
 php-xml                                               x86_64                                         8.2.21-1.el8.remi                                            remi-modular                                         264 k
Installing dependencies:
 oniguruma5php                                         x86_64                                         6.9.9-1.el8.remi                                             remi-safe                                            213 k
Installing module profiles:
 php/common
Enabling module streams:
 php                                                                                                  remi-8.2

Transaction Summary
==============================================================================================================================================================================================================================
Install  1 Package
Upgrade  5 Packages

Total download size: 9.7 M
Is this ok [y/N]: y

Cài đặt PHP OPcache

Với kho RPM của REMI đã được cấu hình, chúng ta có thể tìm kiếm các phiên bản OPcache có sẵn.

$ sudo dnf search opcache
Last metadata expiration check: 0:07:55 ago on Sun 28 Jul 2024 10:12:13 PM UTC.
============================================================================================== Name & Summary Matched: opcache ===============================================================================================
php-opcache.x86_64 : The Zend OPcache
php56-php-opcache.x86_64 : The Zend OPcache
php70-php-opcache.x86_64 : The Zend OPcache
php71-php-opcache.x86_64 : The Zend OPcache
php72-php-opcache.x86_64 : The Zend OPcache
php73-php-opcache.x86_64 : The Zend OPcache
php74-php-opcache.x86_64 : The Zend OPcache
php80-php-opcache.x86_64 : The Zend OPcache
php81-php-opcache.x86_64 : The Zend OPcache
php82-php-opcache.x86_64 : The Zend OPcache
php83-php-opcache.x86_64 : The Zend OPcache
php84-php-opcache.x86_64 : The Zend OPcache

Trong ví dụ này, chúng tôi đang cài đặt php82-php-opcache, dành riêng cho phiên bản PHP 8.2. Hãy đổi sang phiên bản phù hợp với PHP mà bạn đã cài đặt.

sudo dnf install php82-php-opcache

Thông tin chi tiết về gói đã cài đặt có thể được truy vấn bằng lệnh rpm -qi:

$ rpm -qi php82-php-opcache
Name        : php82-php-opcache
Version     : 8.2.21
Release     : 1.el8.remi
Architecture: x86_64
Install Date: Sun 28 Jul 2024 10:21:52 PM UTC
Group       : Unspecified
Size        : 1024035
License     : PHP-3.01
Signature   : RSA/SHA256, Tue 02 Jul 2024 02:07:23 PM UTC, Key ID 555097595f11735a
Source RPM  : php82-php-8.2.21-1.el8.remi.src.rpm
Build Date  : Tue 02 Jul 2024 01:33:41 PM UTC
Build Host  : builder.remirepo.net
Relocations : (not relocatable)
Packager    : Remi Collet
Vendor      : Remi's RPM repository <https://rpms.remirepo.net/> #StandWithUkraine
URL         : http://www.php.net/
Bug URL     : https://forum.remirepo.net/
Summary     : The Zend OPcache
...

Cấu hình PHP OPcache

Sử dụng lệnh find để xác định đường dẫn module OPcache.

$ sudo find / -name opcache.so
/usr/lib64/php/modules/opcache.so
/usr/lib64/php-zts/modules/opcache.so

Module nên được tải tự động khi cài đặt.

$ php -m  | grep -i opcache
Zend OPcache
Zend OPcache

Trình cài đặt cũng sẽ tạo một mẫu cấu hình bên trong /etc/php.d, bạn có thể tùy chỉnh nó.

$ ls /etc/php.d/|grep opcache
10-opcache.ini
opcache-default.blacklist

Mở tệp để chỉnh sửa.

sudo vi /etc/php.d/10-opcache.ini

Trong máy chủ của chúng tôi, chúng tôi đang sử dụng các cài đặt sau để cung cấp hiệu suất tốt:

; Enable Zend OPcache extension module
zend_extension=opcache

; Determines if Zend OPCache is enabled
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1

; The OPcache shared memory storage size (in MB)
opcache.memory_consumption=512

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=128

; The maximum number of keys (scripts) in the OPcache hash table.
opcache.max_accelerated_files=10000

; The maximum percentage of "wasted" memory until a restart is scheduled.
opcache.max_wasted_percentage=5

; Enable timestamp validation, ensuring that cached files are up to date.
opcache.validate_timestamps=1

; Checks for script changes every 2 seconds.
opcache.revalidate_freq=2

; Path where OPcache can store file cache.
opcache.file_cache=/tmp

; Enables or disables opcode caching in shared memory.
opcache.file_cache_only=0

; Enables or disables checksum validation when script loaded from file cache.
opcache.file_cache_consistency_checks=1

; Other performance settings
opcache.fast_shutdown=1
opcache.enable_file_override=1
opcache.optimization_level=0x7FFFBFFF

Tham khảo tài liệu chính thức của OPcache để biết danh sách đầy đủ các tùy chọn mà bạn có thể cấu hình và tùy chỉnh.

Kiểm tra OPcache đang hoạt động

Khởi động lại dịch vụ webserver và php-fpm của bạn.

  • Máy chủ web Nginx
sudo systemctl restart php-fpm nginx
  • Máy chủ web Apache httpd
sudo systemctl restart php-fpm httpd

Danh sách các cấu hình thời gian chạy của OPcache có thể được thực hiện bằng cách thực thi các lệnh dưới đây:

php -i | grep opcache

Tạo một đoạn script PHP mẫu để kiểm tra xem OPcache có hoạt động trên hệ thống của chúng ta hay không.

  • Máy chủ web Nginx
sudo vi /usr/share/nginx/html/opcache.php
  • Máy chủ web Apache httpd
sudo vi /var/www/html/opcache.php

Thêm nội dung vào tệp.

<?php
if (function_exists('opcache_get_status')) {
    $status = opcache_get_status();
    if ($status) {
        echo "OPcache is enabled on the server.";
    } else {
        echo "OPcache is disabled on the server..";
    }
} else {
    echo "OPcache is not installed.";
}
?>

Lưu và mở tệp từ http://serverIP_or_fqdn/opcache.php

Điều này xác nhận rằng PHP OPcache đang hoạt động tốt trên hệ thống của chúng tôi. Chúng tôi hy vọng bài viết này hữu ích và chúc bạn có thời gian tải trang web nhanh hơn!