Comment avez-vous débogage php “Out of Memory” des questions?

J'ai eu quelques problèmes ces derniers temps avec PHP les limites de la mémoire dernièrement:

De mémoire (attribué 22544384) (tried to allocate 232 octets)

Ils sont assez nuisances debug depuis que je ne suis pas de gauche avec beaucoup d'infos sur ce qui a causé le problème.

L'ajout d'une fonction d'arrêt a aidé

register_shutdown_function('shutdown');

puis, à l'aide de error_get_last(); je peux obtenir des informations sur la dernière erreur, dans ce cas, le "Out of memory" erreur fatale, telles que le numéro de la ligne, et le php de nom de fichier.

C'est bien joli, mais mon programme php est fortement orientée objet. Une erreur profonde dans la pile ne m'en dit pas beaucoup sur le contrôle de la structure ou de la pile d'exécution au moment de l'erreur. J'ai essayé debug_backtrace(),, mais cela me montre la pile lors de l'arrêt, pas la pile au moment de l'erreur.

Je sais que je peux lever la limite de la mémoire à l'aide de la fonction ini_set ou de modifier le php.ini, mais qui n'est pas moi plus près de la réalité de déterminer ce que consomme une grande quantité de mémoire ou de ce que mon flux d'exécution ressemble à l'erreur.

Quelqu'un a une bonne méthodologie pour le débogage des erreurs de mémoire avancé Orienté Objet PHP programmes?

  • 232 octets, et vous obtenez un problème de mémoire? o.O
  • Ce que vous stockez dans votre objets que j'avais besoin+ de 20 mégas de ram?
  • PHP meurt parce qu'il ne peut pas allouer de 232 octets sur le dessus de ce qu'il a déjà alloué jusqu'à présent (ce qui est la limite de la mémoire).
  • Voir PHP le profilage de la mémoire.
  • c'est ce que j'essaie de trouver 😛
  • merci - xdebug semble être une bonne solution pour quand, j'ai déjà quelques pistes sur la question. le problème que j'ai c'est que je ne sais rien sur les autres questions que le numéro de ligne et le nom de fichier que l'erreur s'est produite sur.
  • Var_dumps + sorties. Beaucoup de var_dumps & sorties.... Ou, de préférence, xdebug!
  • les endroits à vérifier: la répétition d'une chaîne de construction, de manipulation de fichiers (en particulier le chargement des images de grande taille via GD et autres), la construction de grands fichiers Excel, etc...), la matrice de la construction. Tout en PHP prend plus de mémoire que les données brutes suggère qu'elle serait, en raison de PHP moteur de frais généraux.
  • Certains très connus des bibliothèques (tels que la Doctrine ou le framework Symfony) créer d'incroyables quantités d'objets. En Particulier, La Doctrine. J'ai dû le réécrire toute une partie d'une application à la fois afin d'éviter la Doctrine, parce qu'il a été unusably lent.

InformationsquelleAutor Kevin Owocki | 2011-05-24