Je suis confronté à plus de consommation de mémoire en Php 7 comparer à PHP 5.6

Quand je faisais un test, j'ai trouvé que PHP 7 a l'aide de plus de mémoire que de PHP 5.6.

Donc, j'ai fait un test. J'ai couru un script contenant seulement:

  $a=10;

et ci-dessous les résultats pour la mémoire utilisée lorsque j'ai utilisé PHP CLI sans modules (php -n)

php 5.6 = 222600 Bytes
php 7.0 = 350448 Bytes

* PHP 5.6.23 (cli) (built: Jun 22 2016 12:13:15)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies 

* PHP 7.0.9 (cli) (built: Jul 20 2016 10:47:41) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

Environnement est

  • Système d'exploitation: window 10
  • Serveur : IIS (bien que j'ai utilisé de la CLI, pas sur le serveur), avec fast cgi
  • machine : 64 bits
  • php-5.6.23-nts-Win32-VC11-x64
  • php-7.0.9-nts-Win32-VC14-x64

Quelqu'un peut-il expliquer pourquoi j'ai obtenu ce résultat?


Des Tests Supplémentaires

L'aide de ce code, comme suggéré par @gordon,

$i=0;
while ($i++ < 100000) ;

php 5.6: 227408 octets

php 7.0: 386640 octets

J'ai déterminé l'utilisation de la mémoire avec ce code:

echo PHP_EOL;
echo "Memory Usage :".memory_get_usage();
echo PHP_EOL;
echo "Real Memory Usage :".memory_get_usage(true);
echo PHP_EOL;
echo "Real Peak Memory Usage :".memory_get_peak_usage(true);
echo PHP_EOL;
echo "Peak Memory Usage :".memory_get_peak_usage();
  • Avez-vous comparé avec un peu de code? Même si, plus ou moins, vide script consomme plus de 100k ne nous dit pas si c'est vrai, dans un "vrai" scénario. Ce qui est plus intéressant de savoir..
  • Le plus probable, parce que PHP/7 optimisations ont été la cible des scripts complexes. L'un des revêtements sont très peu susceptibles de provoquer un goulot d'étranglement.
  • Peut-être les deux versions permis à plus ou moins modules, mais je ne suis pas sûr
  • en fait, il est differnce quand je suis de benchmarking dans l'application, donc j'ai pensé à trouver la cause du problème, donc démarré avec une seule ligne de code.
  • je suis en cours d'exécution de code à l'aide de la cli, sans charger n'importe quel module.
  • peut-être, mais l'exemple que vous donnez ici est artificiel et très inutile. Si vous voulez savoir pourquoi votre application consomme plus de mémoire, faire qui dans une question avec plus de détails à propos de l'application. Le profil de votre application. La façon dont la question est formulée maintenant insinue que PHP7 en général mange plus de mémoire. C'est un nuisible suggestion à faire, parce que les gens vont lire cela et le prendre pour une pièce de monnaie (après tout, c'était écrit sur Stack Overflow), alors qu'en réalité, PHP7 n'a de nombreuses améliorations pour réduire l'utilisation de la mémoire. Voir par exemple nikic.github.io/2014/12/22/...
  • J'ai vraiment apprécier et impatient pour PHP7, même le temps d'exécution a diminué dans PHP7, qui est plus bénéfique pour moi. Je ne suis pas de pointage de PHP 7, je veux juste savoir, quelle est la raison derrière l'allocation de mémoire, j'ai beaucoup cherché, mais ne pouvait pas trouver c'est pourquoi j'ai posé la question. j'ai mis l'exemple b/c tout on peut tester que sur leur machine sans aucune logique.
  • Il est probable que l'amorçage de l'interprète/moteur nécessitant plus de mémoire maintenant. Ce n'est certainement pas le $a=10; l'assignation que vous faites. Comparer les 3v4l.org/jmBha/perf#output pour un autre exemple artificiel.
  • Je suis en cours d'exécution de code sur la cli, sans charger n'importe quel module, en revanche, oui, j'ai la configuration par défaut de 128 M, pour
  • Je upvoted la question parce que je pensais que le scénario (les frais généraux d'un presque vide script) était assez intéressant en termes de culture générale (je sais que ce n'est pas un monde réel scénario, nous devrions faire attention à) et pourrait utiliser quelques réponses à apporter des modifications à PHP internals. Je pense que la mise à jour pour fournir un tout autre script modifie le sens de la question et le rend effectivement plus vague et moins responsable.
  • Merci , j'ai la mise à jour b/c Gordon mentionner que le service de base n'était pas un monde réel scénario, alors que mon souci était le cas ,pourquoi la consommation de mémoire en php 7 est élevé, même une seule variable est initialisée, j'ai donc exécuté 3v4l.org/jmBha/perf#output le code à ma machine à confirmer plus, j'ai donc ajouté un autre morceau de production en tant que mise à jour 2. Je voulais juste vous assurer que ce n'est pas seulement l'initialisation d'une variable. Ma préoccupation est à peu près comment ça se passe?
  • Si vous êtes inquiet au sujet d'un processus vide à l'aide d'une centaine de kilo-octets supplémentaires votre meilleur pari est probablement la mise à niveau de votre serveur à partir des années 1990 de l'ère de l'ordinateur.
  • Alors, laquelle de ces méthodes avez-vous utilisé? Le bon est memory_get_usage() (pas de "vrai" param, pas de "pic"). Sinon, vous êtes soit en mesurant les détails de l'allocation ou de la mesure de l'utilisation de la mémoire par le compilateur.
  • Je comprends, je comprends la valeur de tous les quatre, et tous les résultats sont plus élevés dans les PHP7 comparer à php 5.6, ma préoccupation est que, s'il en est ainsi pour l'initialisation d'une variable ou d'une boucle de processus de ce qui se passerait pour une page complexe.et effectivement il se passe dans l'une de mes page php.
  • Vous avez peut être droit, juste par curiosité, quelle est la gradation de serveur peut aider dans ce cas. Je comprends que je peux augmenter la mémoire, mais d'un autre côté, je vais aussi essayer d'améliorer le code pour qu'il consomme moins de ressources.
  • Je ne suis pas sûr de savoir comment vous proposons d'améliorer le code, étant donné que vous êtes voir les différences avec $a=10;. Vous vous engagez dans l'optimisation prématurée.
  • Ainsi, les souches des différentes versions est fondamentalement différent, il n'est pas surprenant qu'une version plus avancée de PHP est également plus grand en taille. De plus, le Zend Engine version est différente, et même le VC version, ils sont compilés sur est différent aussi. Rien d'étonnant jusqu'ici, la question est, faut-il augmenter de façon exponentielle en fonction de la taille de votre script, ou la différence reste similaire? Avec ces petits codes, il est difficile de le déterminer.
  • Je maintiens qu'il est intéressant de noter que vous pouvez limiter la mémoire autorisée à 128 MO et PHP ignore le paramètre. Pourquoi est-ce qui se passe? Vous avez défini explicitement les limites de la mémoire dans vos fichiers ini? Si vous n'obtenez pas de PHP pour se conformer aux limites de la mémoire alors comment obtenir une interprétation valable de votre utilisation de la mémoire les résultats? c'est à dire que le reste est réglé pour permettre à PHP d'utiliser toute la mémoire qu'il souhaite? À quel point vous êtes simplement en regardant ce que PHP ne quand pas de restrictions sont prévues?
  • Non, il n'est pas augmenté de façon exponentielle , mais ouais, j'avais un script en 5.6, c'était de prendre ~628K, mais en PHP 7 il a fallu ~1069k. C'est ce qui m'inquiétait, et j'ai essayé de trouver la raison, je ne dis pas que cela ne devrait pas arriver en php 7.0, mais, en raison de la curiosité, je veux juste savoir ce qui a changé en php5.6 et php7.0, que l'origine de ce problème. Il serait très utile, si je pouvais trouver la raison, comme c'est en raison de la compilation dans vc 14, ou zend engine, ou PHP7.0 noyau lui-même.
  • Comment savez-vous que PHP 7 n'est pas seulement d'être plus efficace et plus juste en utilisant plus de mémoire que c'est plus rapide et disponible? c'est à dire qu'il essaie de vous aider. Il est vraiment clair que vous avez défini des restrictions de mémoire. Afin de vous plaindre du comportement par défaut des versions différentes de PHP?
  • Ne vous méprenez pas, mon Pote, je ne me plains pas, je suis juste essayer de comprendre les choses. Même dans les commentaires précédents j'ai mentionné qu'il est plus efficace dans l'exécution, l'enregistrement des temps de réponse signifie qu'il peut serveur de plus de requêtes par seconde, ce qui est bon pour tout le monde, Mais, je veux juste savoir la raison de plus de l'utilisation de la mémoire. Même moi, je ne suis pas confirmé que c'est dû à PHP7 de soi. il peut être binaire windows de PHP 7 est en train de faire une telle chose, je ne suis pas en soulignant l'opposition, mais je veux juste savoir la raison, afin que je puisse suivre les meilleurs.
  • Pourquoi pensez-vous que PHP est ignorant la limite de la mémoire? Aucun des chiffres cités sont n'importe où près de 128M. Ce paramètre ne veut pas dire "s'il vous plaît utiliser exactement 128M", il signifie "si vous trouvez que vous avez besoin de plus de 128M, interrompre immédiatement le processus". Si le plafond (la limite de la mémoire) est de 10 pieds de haut, 100 pieds de haut, ou emporté par un ouragan ne fait aucune différence pour la mesure de la hauteur quelqu'un (l'utilisation de la mémoire de quelque chose de beaucoup plus petite que celle de la limite).
  • Mes excuses, je n'ai pas lu vos valeurs correctement. Vous avez raison, les valeurs sont inférieures à 1 MO. Je soupçonne tout ce que vous voyez est le "ménage par défaut" que PHP a lors du démarrage. Je soupçonne que l'utilisation de la mémoire ferait plutôt plus de sens quand vous commencez à allouer des tableaux de grande taille ou des lots d'objets. c'est à dire les entrées de centaines de milliers de personnes. Vous devriez alors voir que PHP 7 est plus "efficace". j'.e .moins de mémoire pour les mêmes structures de données.
  • Un excellent outil pour voir les différences entre les versions de PHP est 3v4l.org Aussi agréable à comparer des perles comme la 3v4l.org/cgOC3

InformationsquelleAutor developerCK | 2016-09-28