Maison > Article > développement back-end > L'impact des nouvelles fonctionnalités de PHP 8 JIT sur les performances des applications PHP
Recommandé : "Tutoriel PHP8"
Avant-propos
La nouvelle fonctionnalité qui attire le plus l'attention dans le prochain PHP 8 est l'introduction du support JIT, j'ai brièvement présenté ce qu'est JIT et la différence avec Opcache. Voici un bref résumé :
Cela semble très haut de gamme, mais JIT est principalement optimisé pour les opérations gourmandes en CPU, et les applications Web PHP grand public actuelles sont toutes des opérations gourmandes en E/S, donc le JIT introduit dans PHP 8 est très efficace pour ces sites Web Les performances de l'application ont-elles été améliorées ? À cette fin, nous avons spécialement compilé et installé la version PHP 8 Alpha et effectué des tests de référence simples sur les applications en ligne de commande (opérations gourmandes en CPU) et les applications Laravel (opérations gourmandes en IO) pour le savoir.
Préparez une machine virtuelle Ubuntu
Remarque : le JIT de PHP ne peut prendre effet que sous l'architecture X86, utilisez donc les environnements PC, Mac et Linux avec Intel CPU Tout peut être pris en charge.
Comme PHP 8 n'est pas encore officiellement publié, vous pouvez uniquement télécharger le code source, le compiler et l'installer, vous devez donc préparer un environnement Linux comme environnement de test. De nombreux étudiants m'ont dit qu'ils n'avaient pas démontré le processus de fonctionnement sous Windows, j'ai donc choisi aujourd'hui spécifiquement d'installer Ubuntu 18.04 via WSL dans Windows 10 Professional Edition comme environnement de démonstration. C'est beaucoup plus simple que d'installer une machine virtuelle via Virtual Box ou VMWare. , je dois dire qu'à partir de Windows 10, il est devenu de plus en plus convivial pour les développeurs, même s'il y a encore une certaine distance par rapport à Mac. Après tout, Mac est un système natif de type Unix.
Pour en revenir au sujet, Windows fournit officiellement les documents correspondants pour l'installation de la version WSL de la machine virtuelle Ubuntu : Guide d'installation du sous-système Windows pour Linux pour Windows 10, suivez-le simplement, c'est très simple, sous Windows Après le téléchargement et l'installation depuis le store, vous pouvez cliquer sur le bouton Démarrer pour démarrer la machine virtuelle Ubuntu :
L'interface après ouverture est comme ça, elle ressemble à une fenêtre de terminal :
L'expérience d'utilisation de cette machine virtuelle est plus simple que celle des machines virtuelles traditionnelles. Par exemple, vous pouvez appeler directement des programmes hôtes Windows, tels que. en tant que VS Code, et les gérer via Nginx dans la machine virtuelle. Les applications Web sont également accessibles directement à partir du navigateur hôte Windows sans configurer le mappage des ports, il est donc très pratique de les utiliser comme environnement de test et de développement Linux local.
Bien sûr, si vous ne voulez pas essayer quelque chose de nouveau, vous pouvez utiliser une machine virtuelle traditionnelle ou le système Ubuntu natif.
Initialisation du projet de démonstration
Ensuite, nous devons installer Nginx, ainsi que PHP et Composer dans cette machine virtuelle Ubuntu via la fenêtre de terminal ouverte ci-dessus, via ce qui suit Vous pouvez le faire avec la commande :
sudo apt install nginx sudo apt install php php-zip php-mbstring sudo apt install composer
Ensuite, installez le projet Web Laravel pour démonstration dans le répertoire racine Web par défaut de Nginx /var/www
via Composer (la vitesse de téléchargement est lente, vous pouvez configurer le miroir global de Composer) :
sudo composer create-project --prefer-dist laravel/laravel blog 6.* -vvv
Une fois l'initialisation terminée, vous pouvez utiliser php artisan serve
pour tester si l'accès à ce projet est normal. Cela ne sera pas démontré ici.
Compilez et installez la version de test de PHP 8
Après avoir terminé les préparatifs ci-dessus, vous pouvez commencer à compiler et à installer la version de test de PHP 8. Tout d'abord, nous téléchargeons PHP 8. à partir du code source de la version Github Test (le téléchargement du package de code source du site officiel PHP est trop lent) :
wget https://github.com/php/php-src/archive/php-8.0.0alpha2.tar.gz
Décompressez et entrez le répertoire racine du code source :
tar zxvf php-8.0.0alpha2.tar.gz cd php-8.0.0alpha2
Démarrez la compilation et l'installation process :
// 1、安装相关依赖库 sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev \ libsqlite3-dev libssl-dev libcurl4-openssl-dev libpng-dev libonig-dev libzip-dev // 2、生成 configure 文件 ./buildconf --force // 3、配置构建流程 ./configure --prefix=/usr/local/php8 \ --with-config-file-path=/usr/local/php8 \ --enable-mbstring \ --enable-ftp \ --enable-gd \ --enable-mysqlnd \ --enable-pdo \ --enable-sockets \ --enable-fpm \ --enable-xml \ --enable-soap \ --enable-pcntl \ --enable-cli \ --enable-json \ --enable-tokenizer \ --enable-ctype \ --enable-bcmath \ --with-openssl \ --with-pear \ --with-zlib \ --with-iconv \ --with-curl \ --with-zip // 4、构建 make // 5、安装 sudo make install
La dernière étape a été exécutée avec succès. Ensuite, un texte d'invite s'affichera indiquant que PHP 8 a été installé avec succès. Vous pouvez également vérifier l'installation réussie via la commande suivante :
.
Le PHP 8 actuel est installé dans le répertoire /usr/local/php8
.
Fichier de configuration d'initialisation
Pour compiler et installer PHP 8, vous devez copier et définir vous-même le fichier de configuration. Nous copions d'abord le fichier de configuration de base php.ini
de. le répertoire du code source dans le répertoire d'installation de PHP :
sudo cp php.ini-production /usr/local/php8/php.ini
Étant donné que JIT est fourni dans l'extension Opcache, vous devez d'abord démarrer cette extension, ouvrir /usr/local/php8/php.ini
et décommenter les éléments de configuration suivants (supprimez simplement le point-virgule précédent ):
zend_extension=opcache.so opcache.enable=1 opcache.enable_cli=1
Puis initialisez le fichier de configuration PHP-FPM.
Copiez d'abord le fichier binaire php8.0-fpm
dans le répertoire /etc/init.d
(fonctionnez toujours dans le répertoire de code source php-8.0.0alpha2
) :
sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php8.0-fpm sudo chmod +x /etc/init.d/php8.0-fpm
进入 /usr/local/php8/etc
目录,初始化 PHP-FPM 配置文件:
cd /usr/local/php8/etc sudo cp php-fpm.conf.default php-fpm.conf
通过 vim
编辑器打开 php-fpm.conf
,修改如下配置项(同时取消前面的分号注释):
pid = /run/php/php8.0-fpm.pid
然后进入当前目录下的 php-fpm.d
子目录:
cd php-fpm.d sudo cp www.conf.default www.conf
打开 www.conf
,修改如下配置项(同时取消前面的分号注释):
user = www-data group = www-data listen = /run/php/php8.0-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660
命令行应用基准测试
完成上述准备工作后,就可以正式开始测试工作了。
首先,我们来测试命令行应用,PHP 官方在源码中提供了一个基准测试文件,我们进入源码所在目录 php-8.0.0alpha2
,通过如下命令测试不启动 JIT 情况下代码运行情况:
/usr/local/php8/bin/php -d opcache.jit_buffer_size=0 Zend/bench.php
运行结果如下(运行时间,单位为 s):
然后,再通过下面这条命令测试启动 JIT 的情况下命令行代码的运行情况:
/usr/local/php8/bin/php -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php
注:关于
opcache.jit_buffer_size
配置项比较好理解,而opcache.jit
配置项对应配置值的每个数字代表不同含义,具体可以参考鸟哥的这篇博客:PHP 8 新特性之 JIT 简介,里面讲得非常详细,一般对于命令行应用,将该配置值配置为 1205,对于 Web 应用,配置为 1235 或者 1255。
最终运行结果如下:
可以看到,在 CPU 密集型操作的命令行应用中,启用 JIT 与不启用相比,耗时降低了接近 60%,性能提升了 2 倍。
Web 应用基准测试
接下来,我们以 Laravel 演示项目为例,演示 PHP Web 应用中启用 JIT 与不启用性能有没有提升。
启动 PHP-FPM:
sudo /etc/init.d/php8.0-fpm start
在 Nginx 中配置一个新的虚拟主机(/etc/nginx/sites-available/blog
):
server { listen 80; server_name blog.test; root /var/www/blog/public; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
然后进入 /etc/nginx/sites-enable
目录,创建这个虚拟主机的软连接:
sudo ln -s /etc/nginx/sites-available/blog blog
启动 Nginx:
sudo service nginx start
在 Windows 系统的 C:\Windows\System32\drivers\etc\hosts
文件中添加虚拟域名与主机地址的映射:
127.0.0.1 blog.test
此时可以在 Windows 宿主机中通过浏览器访问对应的 Laravel 项目,表示部署成功:
然后,我们还是在 Windows 中,通过 ab
命令对 blog.test
首页进行压力测试(此时尚未启用 JIT):
ab -n 10 -c 10 http://blog.test/
注:
-n
表示总请求数,-c
表示最大并发请求数。
测试结果如下,重点关注 RPS(每秒处理请求数):
最后,在 Ubuntu 虚拟机中,打开 PHP 8 的配置文件 /usr/local/php8/php.ini
,在 Opcache 配置项下新增 JIT 配置:
opcache.jit=1235 opcache.jit_buffer_size=64M
配置完成后,重启 PHP-FPM 服务,再次回到 Windows 宿主机,通过 ab
命令对 http://blog.test
页面进行压力测试:
ab -n 10 -c 10 -s 60 http://blog.test/
注:
-s
表示超时时间。
运行结果如下:
可以看到在 IO 密集型操作的 Web 应用中,启用 JIT 与不启用相比,性能不但没有提升,反而有 10% 左右的损耗,至少在 Laravel 应用中是如此。
小结
当然,这里的测试仅限于的 Ubuntu 虚拟机环境(Windows WSL 版,配置是 8C8G),并且我也只是将 JIT 参数调整为官方建议的参数,没有做更多的对比测试,但是可以肯定的是 JIT 对 CPU 密集型操作优化效果很好,对 Web 应用性能是否有提升,取决于你的环境和配置的调优,因此 JIT 对 IO 密集型操作应用的性能优化效果有限,更适用于 CPU 密集型操作场景的性能优化,比如图像处理、机器学习等。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!