Maison > développement back-end > tutoriel php > Dépannage pour éviter le débordement de mémoire dans le processus PHP

Dépannage pour éviter le débordement de mémoire dans le processus PHP

藏色散人
Libérer: 2023-04-08 22:50:01
avant
2507 Les gens l'ont consulté

La taille de la mémoire du processus PHP peut être définie par défaut dans le fichier de configuration memory_limit=128M

. le programme ini_set('memory_limit', '1024M'); Réglez-le comme ça C'est 1G. Cependant, ce paramétrage n'est généralement pas effectué car il affectera d'autres services de la machine. Parfois, vous pouvez vérifier le code. Plusieurs fois, un débordement de mémoire se produit parce que les variables PHP ne sont pas libérées à temps ou lors du parcours d'un tableau relativement grand.

1. Dépannage

memory_get_usage() PHP a cette fonction système pour obtenir la quantité d'espace mémoire utilisée par le processus actuel. L'unité renvoyée est round(memory_get_usage()/1024/1024, 2).'MB', convertie en MB

peut suivre les changements de mémoire pendant l'exécution du code.

2. Cas courants de débordement de mémoire

Parcourez un grand tableau et modifiez certaines valeurs du tableau, ce qui entraîne une copie du tableau pendant le processus de parcours.

La caractéristique des variables PHP est la "copie en écriture".

Quand il s'agit de l'affectation du tableau $arr, elle sera divisée et générera une nouvelle structure HashTable, provoquant l'utilisation de la mémoire. pour changer instantanément. Grande

3. Traversez et attribuez d'autres variables

$arr = range(0, 599999);
echo &#39;foreach前内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;
foreach($arr as $key => $item) {
    $arr[$key] = $item + 1;
    if($item % 100000 == 0) {
        echo &#39;foreach中内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;
    }
}
echo &#39;foreach后内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;

//输出
/*
foreach前内存:49.9MB
foreach中内存:81.36MB
foreach中内存:84.42MB
foreach中内存:87.47MB
foreach中内存:90.52MB
foreach中内存:93.57MB
foreach中内存:96.62MB
foreach后内存:49.9MB
*/
Copier après la connexion

solution, utilisez le parcours de référence <🎜. >

$arr = range(0, 599999);
echo &#39;foreach前内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;

foreach($arr as $key => &$item) {
    $arr[$key] = $item + 1;
    if($item % 100000 == 0) {
        echo &#39;foreach中内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;
    }
}unset($key);unset($item);
Copier après la connexion
Une fois le parcours terminé, n'oubliez pas de unset($key);unset($item); Parce que $item est une référence au dernier élément du tableau, si vous modifiez cette variable ultérieurement, elle sera directement modifié au tableau.

Recommandé : "

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal