Maison  >  Article  >  développement back-end  >  Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)

Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)

慕斯
慕斯avant
2021-06-25 10:22:113309parcourir

Nous en savons tellement sur php7 en PHP, je ne sais pas ce que vous savez sur php7, je crois qu'un grand nombre de personnes. ne le fera pas. Si vous connaissez cette partie des connaissances, ne vous inquiétez pas, cet article vous mènera à une compréhension plus approfondie de ce contenu.

Contexte de la recherche sur la technologie PHP7

  1. Nous devons économiser des coûts dans le contexte de l'augmentation des revenus et de la réduction des dépenses de l'entreprise
  2. Performances de PHP7 par rapport à l'actuel PHP version 5.X sur Meizu Online Au moins doublé
  3. Les utilisateurs actifs quotidiens de la communauté connaissent une croissance rapide (le PV quotidien moyen de 15 ans de données a augmenté de 348% par an et l'UV quotidien moyen a augmenté de 112% par an)
  4. L'environnement général de l'Internet mobile nécessite notre Le programme peut répondre plus rapidement aux demandes des utilisateurs pour répondre à une meilleure expérience utilisateur
  5. Le désir de connaissance des nouvelles technologies (pour satisfaire un peu un peu de vanité)

Les performances de PHP7 sont faibles Remarque

Impression initiale des performances de PHP7 (3 fois + amélioration par rapport à PHP5)

Comparaison des performances - tri rapide. algorithme (générer aléatoirement 5000 numéros puis trier selon l'algorithme rapide)

Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)
PHP5.1 Le temps de réponse moyen d'un tri rapide avec 5000 numéros est de 2587 ms
PHP5.2 La moyenne le temps de réponse du tri rapide avec 5000 nombres est de 2625 ms
PHP5.3 Le temps de réponse moyen du tri rapide avec 5000 nombres est de 2509 ms
PHP5.4 Temps de réponse moyen du tri rapide de 5000 nombres 2339 ms
PHP7.0 5000 nombres temps de réponse moyen de tri rapide 685 ms

2. Comparaison des performances - Page d'accueil WordPress

Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)
PHP5.1 Temps de réponse moyen WordPress 505 ms
PHP5.2 Temps de réponse moyen WordPress 521 ms
PHP5.3 Temps de réponse moyen de WordPress 498 ms
PHP5.4 Temps de réponse moyen de WordPress 470 ms
PHP7.0 Temps de réponse moyen de WordPress 158 ms

Comparaison des performances - Flyme Community APP

Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)
PHP5.4 Tri rapide de 500 numéros TPS 552
PHP7.0 500 numéros Tri rapide de numéros TPS 3165
Page d'accueil de l'application Flyme Community PHP5.4 TPS 1535
Page d'accueil de l'application Flyme Community PHP7.0 TPS 1975
Page de liste de la section Flyme Community APP PHP5.4 TPS 2237
Page de liste de la section Flyme Community APP PHP7.0 TPS 2387

Plusieurs problèmes et solutions rencontrés lors des tests de performances

Pourquoi les performances de PHP7 peuvent-elles être autant améliorées ?

1. JIT
2. Modifications dans Zval
3. Type interne zend_string
4. Modifications dans les tableaux PHP (HashTable et Zend Array)
5. Mécanisme d'appel de fonction (Fonction Convention d'appel)
6. Laissez le compilateur effectuer une partie du travail à l'avance via des définitions de macros et des fonctions en ligne

Pourquoi l'amélioration réelle des performances commerciales de PHP7 n'est-elle que d'environ 30 % ?

  1. Les entreprises réelles n'ont pas nécessairement une logique de calcul très complexe
  2. Les entreprises réelles utiliseront Redis et MYSQL, et les goulots d'étranglement du réseau et des E/S affectent les performances globales de PHP7
  3. Les problèmes de performances HTTPS limitent les capacités de PHP7

Problèmes de proxy Redis

Le but du proxy Redis est la haute disponibilité et la mise en cache distribuée de Redis
Réussi Le test de performances est une connexion relativement directe vers redis. La perte de performances liée à l'utilisation de Proxy est d'environ 10 à 15 % (différentes entreprises peuvent avoir un impact plus important)

Y a-t-il donc de la place pour l'optimisation de Proxy ?

Problèmes avec les liens longs et courts entre PHP et Redis

Les performances des connexions longues PHP7 Redis sont environ 10 % supérieures aux performances des connexions courtes (les différentes entreprises varient considérablement)

Base de données MYSQL Problème de pool de connexions

Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)

Le pool de connexions à la base de données est responsable de l'allocation, de la gestion et de la libération des connexions à la base de données. Il permet aux applications de réutiliser une connexion à la base de données existante au lieu d'en établir une nouvelle.
Atlas est un middleware de base de données développé et maintenu par 360. Il est situé entre l'application et MySQL. Il implémente le protocole client-serveur de MySQL, communique avec l'application en tant que serveur et communique avec MySQL en tant que client. Il protège les détails de la base de données des applications et réduit la charge sur MySQL.

Atlas prend en charge les temps d'arrêt de la base de données principale sans affecter la lecture, la séparation lecture-écriture, le partage automatique des tables, le traitement de sécurité, le redémarrage en douceur, le pool de connexions, etc.
Après avoir utilisé le pool de connexions à la base de données, l'effet de levier des performances TPS a été augmenté de 80%
Jetons un coup d'œil à l'effet

Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)

Quelques détails de l'optimisation des performances PHP7

PHP7 Opcache (amélioré d'environ 1 fois)

Opcache Comment ça marche ?
  1. PHP est un langage interprété. Le moteur Zend interprétera le code PHP en code machine exécutable (Operate Code), puis le transmettra au CPU pour exécution.
    Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)
  2. Comment Opcache accélère
    Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)

  3. Regardez les résultats après l'ajout d'opcache (moyenne des requêtes Le temps de réponse a été réduit de deux fois)
    Comprendre la transformation des performances de PHP7 en une minute (performances multipliées par 4)

Compilateur GCC4.8+PGO (augmentation de 5% à 10%)

PGO est une optimisation de compilation technologie qui peut être utilisée avec des compilateurs tels que GCC pour améliorer l’efficacité de compilation du compilateur.
Bien que PGO puisse améliorer l'efficacité de la compilation, il n'est pas largement utilisé.
La raison est très simple :
1. Son modèle compliqué de double compilation et ses scénarios d'utilisation limités font que PGO semble inutile
2. Après l'émergence de produits comme opcache, l'amélioration des performances apportée par PGO Ce n'est pas très évident .

Ouvrir plusieurs processus principaux PHP-FPM (augmentation d'environ 10%)

<source lang="xml" collapse="false" first-line="1">
    #php-fpm.conf 
    listen = /dev/shm/php-fcgi.sock
    #php-fpm2.conf 
    listen = /dev/shm/php-fcgi2.sock

    #/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm.conf
    #/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm2.conf

    #代理
    upstream backend{
        server unix:/dev/shm/php-fcgi.sock;
        server unix:/dev/shm/php-fcgi2.sock;
    }
</source>

HugePage (augmentation de 2%-3%)

La mémoire par défaut est paginée à 4 Ko, et l'adresse virtuelle et l'adresse mémoire doivent être converties, et cette conversion nécessite une recherche de table
Afin d'accélérer le processus de recherche de table, le processeur aura un intégré. TLB (Translation Lookaside Buffer). Évidemment, si la page virtuelle est plus petite, le nombre d'entrées dans le tableau sera plus important
Et la taille du TLB est limitée. Plus il y a d'entrées, plus le Cache Miss du TLB sera élevé. Donc, si nous pouvons activer des pages de mémoire volumineuses, ce manque de cache TLB peut être indirectement réduit.

<source lang="xml" collapse="false" first-line="1">
    opcache.huge_code_pages=1
    sudo sysctl vm.nr_hugepages=128
</source>

Optimisation des paramètres de performances de phase

Optimisation partielle des paramètres de performances PHP

  1. Configuration php.ini

    <source lang="xml" collapse="false" first-line="1">
        opcache.enable=1
        opcache.enable_cli=1
        opcache.memory_consumption=128
        opcache.interned_strings_buffer=8
        opcache.max_accelerated_files=4000
        opcache.revalidate_freq=60
        opcache.save_comments=0
        opcache.fast_shutdown=1
        opcache.huge_code_pages=1
        opcache.file_cache=/dev/shm/opcache/
    </source>
  2. PHP-FPM

    <source lang="xml" collapse="false" first-line="1">
        listen = /dev/shm/php-fcgi.sock
        pm = static
        pm.max_children = 320
        pm.max_requests = 10240
    </source>

Problèmes non résolus

Problèmes de performances HTTPS Nginx

Contexte de la recherche sur la technologie PHP7

  1. Dans le contexte de l'augmentation des revenus et de la réduction des dépenses de l'entreprise, nous devons réduire les coûts
  2. PHP7 par rapport à l'actuel Meizu Les performances du PHP en ligne version 5. L'environnement général de l'Internet mobile impose à nos programmes de répondre plus rapidement aux demandes des utilisateurs pour répondre à une meilleure expérience utilisateur
  3. Le désir de connaissance des nouvelles technologies (pour satisfaire un peu de vanité)
  4. Partage de vidéos d'apprentissage associées :
  5. Tutoriel vidéo php

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer