Position actuelle: Accueil> Derniers articles> Comment effectuer l'analyse de la mémoire à l'étranglement via Memory_get_usage et Memory_get_peak_usage pour améliorer les performances de l'application

Comment effectuer l'analyse de la mémoire à l'étranglement via Memory_get_usage et Memory_get_peak_usage pour améliorer les performances de l'application

gitbox 2025-09-04

2. Utilisez Memory_get_Usage pour surveiller l'utilisation actuelle de la mémoire

En insérant Memory_get_Usage () dans une position critique dans le code, nous pouvons surveiller l'utilisation de la mémoire de l'application en temps réel et détecter rapidement les fuites de mémoire ou l'utilisation de la mémoire inutile. Voici un exemple simple:

 <span><span><span class="hljs-comment">// Obtenez l&#39;utilisation actuelle de la mémoire</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Utilisation actuelle de la mémoire: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_usage</span></span><span>() . </span><span><span class="hljs-string">" octet\n"</span></span><span>;

</span><span><span class="hljs-comment">// Simuler certaines opérations</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1000000</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Utilisation de la mémoire après l&#39;opération: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_usage</span></span><span>() . </span><span><span class="hljs-string">" octet\n"</span></span><span>;

</span><span><span class="hljs-comment">// Mémoire libre</span></span><span>
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Mémoire libre后的使用量: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_usage</span></span><span>() . </span><span><span class="hljs-string">" octet\n"</span></span><span>;
</span></span>

En sortant le résultat, nous pouvons voir les changements de mémoire avant et après l'opération du tableau, déterminant ainsi si certaines opérations provoquent une augmentation anormale de l'utilisation de la mémoire.


3. Utilisez la mémoire_get_peak_usage pour analyser les pics de mémoire

Dans certains réglages de performances, il est particulièrement important de comprendre les pics de mémoire lors de l'exécution du script. L'utilisation de mémoire_get_peak_usage () peut nous aider à identifier les parties du code entraînera une surtension dans l'utilisation de la mémoire. Par exemple:

 <span><span><span class="hljs-comment">// Obtenez la valeur de pic de mémoire</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Péx de mémoire pendant l&#39;exécution du script: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_peak_usage</span></span><span>() . </span><span><span class="hljs-string">" octet\n"</span></span><span>;

</span><span><span class="hljs-comment">// Simuler la consommation de mémoire</span></span><span>
</span><span><span class="hljs-variable">$array1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1000000</span></span><span>);
</span><span><span class="hljs-variable">$array2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1000001</span></span><span>, </span><span><span class="hljs-number">2000000</span></span><span>);

</span><span><span class="hljs-comment">// Obtenez un nouveau pic de mémoire</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Nouveau pic de mémoire: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_peak_usage</span></span><span>() . </span><span><span class="hljs-string">" octet\n"</span></span><span>;
</span></span>

De cette façon, nous pouvons analyser l'impact de différentes opérations sur la mémoire, en particulier le traitement des données complexes ou les opérations de baies / objets à grande échelle, que les liens ont conduit à une forte augmentation de l'utilisation de la mémoire.


4. Optimiser l'utilisation de la mémoire

En analysant les données renvoyées par Memory_get_Usage () et Memory_get_peak_usage () , nous pouvons découvrir les goulots d'étranglement potentiels de mémoire et les optimiser de manière ciblée. Les méthodes d'optimisation courantes comprennent:

  • Évitez les variables inutiles : des variables de libération qui ne sont plus utilisées dans le temps, en particulier les grandes tableaux ou objets. L'utilisation d'unset () peut aider à réduire l'utilisation de la mémoire.

  • Utilisation du générateur : Lors du traitement de grandes quantités de données, l'utilisation du générateur de PHP au lieu de réseaux traditionnels peut réduire considérablement la consommation de mémoire, car le générateur génère des données à la demande au lieu de charger toutes les données en mémoire à la fois.

  • Optimisation des structures de données : en ce qui concerne l'utilisation de la mémoire, il est crucial de choisir la bonne structure de données. Par exemple, lorsque vous utilisez des tableaux, si vous pouvez remplacer des objets complexes par des types de données plus propres tels que des chaînes ou des entiers, vous pouvez réduire considérablement l'utilisation de la mémoire.

  • Évitez les fuites de mémoire : les fuites de mémoire sont généralement dues au fait que la référence n'est pas correctement effacée. Nous devons nous assurer que les objets ou les tableaux qui ne sont plus utilisés sont libérés, en particulier dans les boucles ou les scripts de longue durée pour éviter l'accumulation de mémoire.

  • Mécanisme de mise en cache : Dans certaines applications à haute coeur, des mécanismes de mise en cache (tels que redis, memcached) sont utilisés pour réduire l'utilisation de la mémoire et améliorer la vitesse de réponse. Ce type de système de cache stocke les données fréquemment accessibles en mémoire, réduisant la charge de la base de données.


5. Analyse de cas réelle

Dans une application PHP qui traite de grandes quantités de données, Memory_get_Usage et Memory_get_peak_usage sont utilisées pour l'analyse de la mémoire, ce qui nous aide à découvrir les goulots d'étranglement dans l'utilisation de la mémoire. Lors du traitement d'un fichier CSV téléchargé par un utilisateur, le programme lira le fichier entier dans la mémoire pour le traitement, entraînant une consommation excessive de mémoire et éventuellement une erreur de débordement de mémoire.

En analysant la mémoire de pointe, il est constaté que l'utilisation de la mémoire augmente linéairement avec la taille du fichier. Enfin, nous avons réduit la consommation de mémoire des 2 Go d'origine à 500 Mo en lisant les fichiers en lots et en traitant la ligne de données par ligne à l'aide du générateur, améliorant considérablement la stabilité et les performances de l'application.