Maison > Article > développement back-end > Dépannage pour éviter le débordement de mémoire dans le processus PHP
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
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 'foreach前内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>'; foreach($arr as $key => $item) { $arr[$key] = $item + 1; if($item % 100000 == 0) { echo 'foreach中内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>'; } } echo 'foreach后内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>'; //输出 /* foreach前内存:49.9MB foreach中内存:81.36MB foreach中内存:84.42MB foreach中内存:87.47MB foreach中内存:90.52MB foreach中内存:93.57MB foreach中内存:96.62MB foreach后内存:49.9MB */
solution, utilisez le parcours de référence $arr = range(0, 599999);
echo 'foreach前内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
foreach($arr as $key => &$item) {
$arr[$key] = $item + 1;
if($item % 100000 == 0) {
echo 'foreach中内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
}
}unset($key);unset($item);
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 PHPCe 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!