La consommation de mémoire est l'un des problèmes les plus courants que les développeurs rencontrent lorsqu'ils traitent des mégadonnées. Si le programme utilise beaucoup de mémoire, cela peut entraîner le plantage du serveur ou la dégradation des performances, et dans les cas graves, il peut même dépasser la limite de mémoire du script PHP, provoquant la fin du script. Par conséquent, il est très important de surveiller l'utilisation de la mémoire des programmes PHP en temps réel, et la fonction MEMORY_GET_USAGE () nous fournit un moyen simple et efficace d'utiliser la mémoire par le script actuel.
Memory_get_usage () est une fonction intégrée en PHP qui renvoie la consommation de mémoire du script PHP actuel. Sa valeur de retour est le nombre d'octets, indiquant la quantité totale de mémoire allouée par le script actuel. Vous pouvez surveiller l'utilisation de la mémoire du programme en fonction de cette valeur pour vous assurer que la consommation de mémoire ne dépasse pas les attentes.
<span><span><span class="hljs-variable">$memoryUsage</span></span><span> = </span><span><span class="hljs-title function_ invoke__">memory_get_usage</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-variable">$memoryUsage</span></span><span> . </span><span><span class="hljs-string">" octet"</span></span><span>;
</span></span>
Lors du traitement des mégadonnées, en particulier lorsque nous effectuons des opérations qui peuvent consommer beaucoup de mémoire (telles que les requêtes de base de données, la lecture de fichiers, le calcul de données à grande échelle, etc.), il est particulièrement important de surveiller les changements de mémoire en temps réel. Nous pouvons combiner memory_get_usage () avec la journalisation, les informations de débogage ou la sortie de synchronisation pour observer les fluctuations dans l'utilisation de la mémoire.
<span><span><span class="hljs-comment">// Imprimer l'utilisation de la mémoire initiale</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Utilisation initiale 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 les opérations de Big Data:Générer de grandes quantités de données</span></span><span>
</span><span><span class="hljs-variable">$data</span></span><span> = [];
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-number">100000</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-variable">$data</span></span><span>[] = </span><span><span class="hljs-title function_ invoke__">str_repeat</span></span><span>(</span><span><span class="hljs-string">'a'</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>); </span><span><span class="hljs-comment">// Chaque occupation des cordes 1024 octet</span></span><span>
}
</span><span><span class="hljs-comment">// Utilisation de la mémoire après l'impression des données</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 le traitement des données: "</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 d'autres opérations de mémoire</span></span><span>
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>); </span><span><span class="hljs-comment">// Effacer les données</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Effacer les données后的内存使用: "</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>
Dans cet exemple, nous imprimons l'utilisation de la mémoire sur différents nœuds de fonctionnement. De cette façon, nous pouvons observer comment la consommation de mémoire change pendant l'exécution.
Réduire le stockage de données inutile <br> Pour traiter de grandes quantités de données, évitez de stocker des données inutiles en mémoire. Utilisez la requête de la base de données et le traitement de la pagination pour charger des données par lots pour éviter de charger trop de données à la fois.
Utilisation de fichiers mappés de mémoire <br> Pour des fichiers très grands, utilisez des fonctions telles que fopen () et fread () pour la lecture ligne par ligne pour éviter de charger le fichier entier en mémoire à la fois.
Nettoyez régulièrement les variables <br> Utilisez unset () pour effacer les variables qui ne sont plus nécessaires, ce qui peut libérer la mémoire occupée.
Configuration de la limite de mémoire <br> Les limites de mémoire peuvent être définies via INI_SET ('Memory_limit', '256m') dans des fichiers de configuration ou des scripts PHP. Pendant l'exécution du programme, les limites de mémoire peuvent être ajustées à temps pour éviter le débordement de la mémoire.
Utilisation de structures de données optimisées par la mémoire <br> L'utilisation d'algorithmes d'optimisation de mémoire appropriés et de structures de données (comme l'utilisation de SPLFixedArray au lieu de tableaux ordinaires) peut réduire efficacement la consommation de mémoire.
PHP fournit un mécanisme de collecte des ordures (GC) qui recycle automatiquement la mémoire qui n'est plus utilisée. Cependant, lors du traitement d'une grande quantité de données, la collecte des ordures peut ne pas nettoyer immédiatement toute mémoire inutilisée. À l'heure actuelle, la collecte des ordures peut être déclenchée manuellement et Memory_get_usage () peut être utilisée pour observer les modifications avant et après la collection de mémoire.
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Avant l'utilisation 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 les grandes opérations de consommation de mémoire</span></span><span>
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_repeat</span></span><span>(</span><span><span class="hljs-string">'a'</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span> * </span><span><span class="hljs-number">1024</span></span><span> * </span><span><span class="hljs-number">50</span></span><span>); </span><span><span class="hljs-comment">// 50MB données</span></span><span>
</span><span><span class="hljs-comment">// Déclencher manuellement collection d'ordures</span></span><span>
</span><span><span class="hljs-title function_ invoke__">gc_collect_cycles</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Après l'utilisation 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>
En utilisant la fonction Memory_get_Usage () , nous pouvons surveiller la consommation de mémoire des scripts PHP en temps réel et prendre des mesures correspondantes pour optimiser l'utilisation de la mémoire pour s'assurer que le programme ne dépasse pas la limite de mémoire lors du traitement des mégadonnées. De plus, combiné avec d'autres techniques d'optimisation de la mémoire, nous pouvons gérer efficacement les ressources de la mémoire pour éviter le débordement de la mémoire et la dégradation des performances.