Zainstaluj PHP OPcache na Rocky/Alma/CentOS 9|8
OPcache ma na celu poprawę wydajności PHP poprzez przechowywanie w pamięci współdzielonej wstępnie skompilowanego kodu bajtowego skryptów. Poprzez buforowanie skryptów PHP w pamięci usuwa potrzebę ładowania i analizowania skryptów przez PHP przy każdym żądaniu. W przypadku hostowania stron internetowych lub aplikacji webowych zbudowanych w PHP, korzystanie z OPcache znacząco zwiększy szybkość reagowania i ogólne czasy ładowania.
Tak działa PHP OPcache:
- Kompilacja skryptu: OPcache kompiluje żądany skrypt do kodu bajtowego.
- Pamięć podręczna kodu bajtowego: Po skompilowaniu kod bajtowy jest przechowywany w pamięci współdzielonej dla szybszego dostępu.
- Wykonywanie kolejnych żądań: Następnym razem, gdy otrzymane zostanie żądanie dla tego samego skryptu, używana jest pamięć podręczna bajtkodu, co pozwala pominąć etap kompilacji i skutkuje szybszym wykonaniem.
Podsumowując, korzystanie z OPcache pozwoli Ci na szybsze wykonywanie skryptów PHP, zmniejszenie obciążenia procesora i pamięci oraz lepszą skalowalność systemu, ponieważ może obsługiwać więcej jednoczesnych żądań.
Jak więc zainstalować i skonfigurować PHP OPcache na systemach Rocky Linux/AlmaLinux oraz CentOS Stream 9|8. Postępuj zgodnie z instrukcją krok po kroku.
Przełącz na edycję PHP z REMI
Możemy włączyć OPcache tylko na systemie z zainstalowanym PHP. Wspomniane systemy dystrybuują wiele wersji PHP w repozytoriach AppStream. Jednak Opcache jest dostępny w repozytoriach REMI.
Aby sprawdzić, czy PHP jest zainstalowane, wykonaj polecenie:
$ 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 TechnologiesZ mojego systemu możemy potwierdzić, że wersja to 8.2. Możemy więc zresetować moduł PHP.
sudo dnf module reset php -yNastępnie instalujemy repozytorium RPM 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.rpmInstalator automatycznie skonfiguruje repozytorium EPEL jako zależność. Aby sprawdzić, czy REMI działa, uruchom:
$ 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_64Wszystkie moduły PHP można sprawdzić, uruchamiając następujące polecenie:
dnf module list phpOto przykładowy wynik:
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]nstalledTeraz aktywuj konkretny moduł PHP z REMI. Z wcześniejszego wyniku wynika, że zainstalowano PHP w wersji 8.2, co oznacza, że powinniśmy aktywować moduł php:remi-8.2.
sudo dnf module install php:remi-8.2 -yW większości przypadków zaktualizuje zainstalowaną wersję PHP, a nie odinstaluje pakiety.
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]: yInstalowanie PHP OPcache
Po skonfigurowaniu repozytorium RPM REMI możemy wyszukać dostępne wersje OPcache.
$ 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
W tym przykładzie instalujemy php82-php-opcache, który jest specyficzny dla wersji PHP 8.2. Zmień na wersję odpowiednią dla zainstalowanej wersji PHP.
sudo dnf install php82-php-opcacheWięcej informacji o zainstalowanym pakiecie można uzyskać za pomocą polecenia 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
...Skonfiguruj PHP OPcache
Użyj polecenia find, aby znaleźć ścieżkę modułu OPcache.
$ sudo find / -name opcache.so
/usr/lib64/php/modules/opcache.so
/usr/lib64/php-zts/modules/opcache.soModuł powinien być ładowany automatycznie po instalacji.
$ php -m | grep -i opcache
Zend OPcache
Zend OPcacheInstalator utworzy również szablon konfiguracji w /etc/php.d, który możesz dostosować.
$ ls /etc/php.d/|grep opcache
10-opcache.ini
opcache-default.blacklistOtwórz plik do edycji.
sudo vi /etc/php.d/10-opcache.iniNa naszym serwerze używamy następujących ustawień, aby zapewnić dobrą wydajność:
; 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=0x7FFFBFFFOdwołaj się do oficjalnej dokumentacji OPcache, aby uzyskać pełną listę opcji, które możesz skonfigurować i dostosować.
Test OPcache działa
Uruchom ponownie serwer WWW i usługi php-fpm.
- Serwer WWW Nginx
sudo systemctl restart php-fpm nginx- Serwer sieciowy Apache httpd
sudo systemctl restart php-fpm httpdWykaz konfiguracji uruchomieniowych OPcache można uzyskać, wykonując poniższe polecenia:
php -i | grep opcache
Utwórz przykładowy skrypt PHP do testowania, czy OPcache działa w naszym systemie.
- Serwer WWW Nginx
sudo vi /usr/share/nginx/html/opcache.php- Serwer sieciowy Apache httpd
sudo vi /var/www/html/opcache.phpDodaj zawartość do pliku.
<?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.";
}
?>Zapisz i otwórz plik z http://serverIP_or_fqdn/opcache.php
To potwierdza, że PHP OPcache działa prawidłowo w naszym systemie. Mamy nadzieję, że ten artykuł był pomocny i życzymy szybszego ładowania stron internetowych!

