Maison > Article > développement back-end > Qu'est-ce qu'OPCache ? Comment utiliser OPCache pour améliorer les performances PHP ?
Cet article vous présentera OPCache et vous expliquera en détail comment utiliser OPCache pour améliorer les performances de PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Pour un langage interprété comme PHP, tout le code sera chargé et analysé à chaque exécution. L'avantage est que le code peut être traité à tout moment. . Modifications de mise à jour à chaud car nous n'avons pas besoin de compiler. Mais cela entraînera également un problème : il ne pourra pas gérer un trafic excessif. Après tout, chaque fois qu'il est chargé, analysé et publié, cela augmente la charge sur le processeur. Habituellement, un serveur 8 cœurs 16G peut atteindre un taux d'utilisation du processeur de plus de 60 % à environ 2 000 ou 3 000 simultanéités. Et si vous utilisez un framework volumineux comme Laravel, l’efficacité sera encore plus faible. À l'heure actuelle, nous augmentons généralement le nombre de serveurs pour l'équilibrage de charge afin de réduire la pression sur les serveurs. Cependant, le coût de cette démarche augmentera considérablement. Alors, existe-t-il des solutions d’optimisation ?
Dans un article sur l'optimisation de PHP7 par Brother Niao sur son blog, la première suggestion est d'activer OPcache. Bien sûr, une autre option consiste à utiliser Swoole. Nous parlerons de Swoole à l'avenir. Aujourd'hui, nous allons d'abord apprendre OPcache.
OPcache améliore les performances de PHP en stockant le bytecode précompilé des scripts PHP dans la mémoire partagée, en stockant les mots précompilés. L'avantage de sauvegarder le code est qu'il économise la surcharge de chargement et d'analyse des scripts PHP à chaque fois.
Ceci est une introduction à OPcache dans la documentation PHP, c'est-à-dire qu'OPcache enregistre les étapes de chargement et d'analyse à chaque fois, et met en cache le bytecode du script après la première analyse et compilation dans le système. .en mémoire partagée. En fait, cela s’apparente à une compilation incomplète.
Les langages comme Java doivent être empaquetés et compilés avant de pouvoir être exécutés en ligne, par exemple dans un package jar. C++ ou C# peuvent être regroupés dans un fichier .dll ou .exe. Ces fichiers packagés sont des fichiers compilés. Après leur exécution, ils resteront généralement en cours d'exécution, c'est-à-dire qu'ils deviendront un processus résident et leur code entrera en mémoire. Lorsque le programme est en cours d'exécution, il n'est pas nécessaire de l'interpréter ou de le compiler, la vitesse est donc naturellement beaucoup plus rapide. OPcache joue également un rôle similaire. Cependant, il ne s'agit pas d'un processus de compilation complet.Nous comptons toujours sur PHP-FPM pour exécuter le script. Cependant, après avoir activé OPcache, PHP-FPM recherchera d'abord dans la mémoire s'il existe déjà un bytecode pertinent en cache. dans la mémoire, il sera accessible directement. Dans le cas contraire, il sera à nouveau interprété, compilé et mis en cache. De plus, OPcache est destiné aux fichiers, c'est-à-dire que si un fichier est nouvellement ajouté, il ne sera mis en cache que s'il a été exécuté. S'il n'a pas été exécuté, il n'est pas dans la mémoire partagée actuelle.
Apprentissage recommandé : "Tutoriel vidéo PHP"
OPcache est déjà une extension officielle de PHP et est installé avec Le package est publié ensemble, nous pouvons donc utiliser --enable-opcache pour activer l'extension lors de la compilation et de l'installation de PHP. C'est déjà l'extension par défaut. Vous pouvez également utiliser les fichiers du package d'installation pour installer OPcache sur des systèmes sur lesquels OPcache n'est pas installé.
cd php-7.4.4/ext/opcache/ phpize ./configure make && make install
Il est à noter qu'OPcache et Xdebug ne doivent pas être utilisés ensemble dans un environnement de production. Xdebug lui-même n'est pas recommandé pour une utilisation dans un environnement de production. Si vous devez l'utiliser en même temps, vous devez d'abord charger OPcache, puis charger Xdebug.
Une fois l'extension installée, ouvrez l'extension dans le fichier php.ini. Il convient de noter que l'extension OPcache est un package d'extension Zend, nous devons donc ouvrir l'extension Zend.
zend_extension=opcache.so
De plus, il doit être activé.
opcache.enable=1
Lorsque OPcache est activé et que nous mettons à jour le code, nous constaterons que le code que nous venons de mettre à jour n'est pas notre dernier code. En effet, le code a été mis en cache, tout comme Java, et nous devons redémarrer le service. Alors, qu'est-ce que PHP redémarre ici ? Bien sûr, redémarrez simplement notre PHP-FPM. Utilisez simplement la commande kill -USR2 pour redémarrer le processus principal. Une commande de redémarrage rapide est également donnée ici.
ps -ef | grep "php-fpm: master" | grep -v grep | cut -c 9-15 | xargs kill -USR2
Merci pour la correction de Zhihu. Le redémarrage de PHP-FPM n'est pas la meilleure solution. Vous devez utiliser opcache_reset() pour redémarrer manuellement, ou configurer opcache.validate_timestamps + opcache.revalidate_freq via php. Fichier .ini. Compilation automatique d'intervalles, ou recompilez directement le fichier modifié via opcache_compile_file()
Le contenu que nous avons testé est l'environnement de test. Un serveur 4G 2 cœurs, la version PHP utilisée est PHP7.4, configuration normale Nginx et PHP, ulimit est également ouvert au maximum. Le code génère simplement une ligne de texte, mais nous utilisons un simple framework mvc, ce qui signifie que lorsque ce code est exécuté, il chargera au moins plusieurs fichiers au lieu d'un seul fichier.
首先我们来看未开启 OPcache 的情况。
接下来是开启了 OPcache 的情况。
很明显,性能有了很大的提高。不仅速度快了很多,吞吐率也是直接上升了几倍。当然,这只是非常简单的一个测试,不过总体看来,确实对单机的性能提升有很大的帮助。最最主要的是,同样的并发情况下,CPU 资源也比未开启的状态下低了70%。
在 PHP 的官方文档中,已经为我们给出了一套默认的 OPcache 在 php.ini 中的配置。经过测试,基本没什么问题,当然,现在还没有在生产环境中使用过,还需要进行更多的测试。不过文档中指出,这套配置是可以直接运用到线上的,不过需要注意的是某些使用了注解之类功能的高级框架可能需要注意某些参数。
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
具体的配置说明以及其他的一些配置选项我们可以参考官方文档进行详细的了解。
既然是我们的 PHP 大神鸟哥推荐的,而且也是官方推荐的扩展,我觉得在正式生产环境中使用不会有太大问题。另外,官方也给出了一套可以直接运用于线上生产环境的配置参数,也方便我们直接在线上进行测试。目前在生产环境中,我们只使用了一台服务器来进行测试,并且给它多分配了一些负载过来,从目前的情况来看,这一台机器的运行效率比其他几台的高很多。因为它一方面处理了更多的请求,另一方面它的 CPU 资源占用率还没有其他几台机器高。同时,OPcache 也不需要我们去了解更多的进程协程之类的知识,不像 Swoole 一样的会带来更高的学习成本。所以综上所述,在测试完备的情况下,OPcache 绝对是我们最优先考虑的单机优化方案。
更多编程相关知识,请访问:编程入门!!
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!