jeudi, 10 novembre 2011 13:52

Fatal error: Out of memory

Écrit par 
Évaluer cet élément
(0 Votes)

Lorsque vous rencontrez le message d'erreur "Fatal error: Out of memory (allocated xxxxx) (tried to allocate xxxxxx bytes) in file xxxxx", ce message indique que la page que vous essayez d'afficher consomme trop de mémoire par rapport à ce que votre hébergeur vous a autorisé d'utiliser.   Chez certains hébergeurs gratuits, comme Free p.e., cette limitation peut être de 32MB voire moins ce qui, pour faire tourner un site peut se révéler étroit.

Le nom du fichier mentionné dans l'erreur n'est pas utile, c'est juste lui qui a consommé le byte de trop et fait exploser le bouchon.

Un exemple "Fatal error: Out of memory (allocated 29884416) (tried to allocate 4864 bytes) in une_page_quelconque.php on line 21"

Comment comprendre l'erreur ?

  • "Out of memory (allocated 29884416) (tried to allocate 4864 bytes)" : le site n'a pas le droit d'utiliser plus de 30M de mémoire et votre site Joomla a besoin de près de 5MB supplémentaires pour s'afficher et ce besoin a fait exploser votre consommation mémoire.   

  • "in une_page_quelconque.php on line 21" : le nom du fichier n'a pas beaucoup d'importance, c'est lui qui a demandé l'octet de trop qui a fait explosé la mémoire; cela ne signifie pas du tout que c'est lui qui est le gros consommateur.

Si vous êtes sur un serveur web local ou sur un serveur dédicacé, vous avez la possibilité de modifier le fichier php.ini.   Ce fichier est celui qui défini la mémoire maximale que votre site web peut utiliser.   Il s'agit de la variable "memory_limit" : éditer le fichier et augmenter sa valeur.

Si vous êtes sur un serveur web mutualisé ou si vous ne souhaitez pas augmenter la mémoire maximale, il faudra donc identifier quel est le code qui est gros consommateur.   Cela peut être un plug-in, un module ou le composant utilisé sur la page. 

A la recherche du coupable

Faites un tour dans votre liste de plug-ins type Content ou System : lors de l'affichage d'une page, Joomla! exécute un grand nombre de plug-ins dont ceux de ces deux types.   AllEvents fait également appel aux plug-ins de type Content car il est parfaitement possible que vous ayez utilisé un tag dans un champs tel que la description d'un évènement.

Depuis la liste des plug-ins, regardez ceux dont vous êtes certains de ne plus utiliser : les plug-ins de type Content mal écrit pourrait consommer de la mémoire inutilement et un peu de CPU du serveur.   Les désactiver sera donc bénéfique pour votre site.   Faites bien attention en désactivant un plug-in de type System car certains pourraient être requis pour que votre site fonctionne correctement.   Autant désactiver un plug-in Content est assez inoffensif, autant désactiver un plug-in System peut planter le site.

Utilisation du profilage de Joomla

Joomla met également à votre disposition un outil de debugging.   Rendez-vous dans votre console d'administration, cliquez sur "Configuration du site" puis sur l'onglet "Système".  

Activation du débogage de JoomlaActivez le mode de débogage en cliquant sur Oui puis en enregistrant votre modification (pour bien faire, restez dans la page pour désactiver plus facilement ensuite).

Dans un nouvel onglet de votre navigateur, afficher la page de votre site; celle qui provoquait l'affichage du "Out of memory". 

Scrollez jusqu'au bas de la page et aurez alors accès à la console de débogage de Joomla!.

 Joomla! Console de débogage activée

Occupation de la mémoire : après avoir cliqué sur ce titre, vous déplierez une zone qui vous indique votre consommation actuelle.   Notez ce chiffre : plus il est proche de votre limite, plus les risques d'un Fatal error : out of memory sont importantes.

Profile d'information : extrêmement utile car il vous indique la consommation mémoire de votre site à chaque étape importante réalisée par Joomla! dont les différents appels à des modules. Vous pourrez suivre l'augmentation des besoins de mémoires et identifier le coupable c'est-à-dire celui dont la consommation avant <--> après est fort conséquente.   

Ci-dessous un exemple réel : on voit que la consommation de mémoire était de 7,23MB avant l'appel au module Abcdef et qu'après son exécution, la consommation a explosé à 20,17MB.  Ce module a donc consommé 13MB à lui seul.   Désactiver ce module sera donc très bénéfique pour alléger votre page.

Application 0.181 seconds (+0.000); 7.22 MB (-0.001) - beforeRenderModule mod_custom (Logo HR)
Application 0.181 seconds (+0.001); 7.23 MB (+0.003) - afterRenderModule mod_custom (Logo HR)
Application 0.182 seconds (+0.000); 7.23 MB (+0.000) - beforeRenderModule mod_abcdef (Derniers messages Forum)
Application 0.497 seconds (+0.316); 20.17 MB (+12.941) - afterRenderModule mod_abcdef (Derniers messages Forum)
Application 0.497 seconds (+0.000); 20.17 MB (-0.001) - beforeRenderModule mod_articles_popular (Les plus populaires)
Application 0.552 seconds (+0.055); 20.68 MB (+0.517) - afterRenderModule mod_articles_popular (Les plus populaires)

Informations supplémentaires

  • Package Free: Ce billet concerne le package Free et est donc immédiatement disponible dans la version gratuitement téléchargeable de AllEvents.
Lu 1712 fois Dernière modification le samedi, 04 août 2012 11:00
Christophe

Christophe - Développeur de AllEvents; gestionnaire d'évènements pour Joomla

http://allevents.avonture.be/
https://www.facebook.com/com.allevents

Site internet : allevents.avonture.be

Laissez un commentaire

Désolé pour le captcha mais le système de commentaires est spammé; seul le captcha permet de le réduire un peu.

Veuillez ne pas utiliser le système de commentaires pour poser des questions; je n'y donnerai aucune suite et je supprimerai le commentaire.

MERCI D'UTILISER LE FORUM POUR CE TYPE D'USAGE.