PHP Fatal error - Allowed memory size exhausted

PHP Fatal error - Allowed memory size exhausted - PHP - Programmation

Marsh Posté le 09-08-2013 à 15:02:38    

Bonjour,
 
J'ai un petit soucis sur un serveur Apache/Php.
 
En effet, je rencontre dans les logs ce message d'erreur :
 

Citation :

[Fri Aug 09 14:50:51 2013] [error] [client 10.105.48.4] PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 47932639131432 bytes) in Unknown on line 0


 
Apparemment, Apache aurait besoin d'allouer 42 To de mémoire au script.....
 
Voila ce que j'ai déjà exploré comme piste :
 
- Augmentation du "memory_limit" du php.ini (il est actuellement à 256Mo, mais j'ai essayé de le mettre plus haut (jusqu'à 8Go!!) mais j'ai toujours l'erreur).
- Le code php a été revu en long, en large par 3 développeurs différents => RAS. C'est un script simple qui génère des pages xlm avec des 'print'.
- Driver odbc : odbc est utilisé pour attaquer une base sous Oracle. RAS de ce coté là non plus. (pour info les requêtes retournent très peu d'infos. il n'y a pas de pb de ce coté là)
 
Nous avons mis plein de ligne de debug dans le script avec des "memory_limit" et les chiffres sont corrects tout au long de l’exécution...
Le plus étrange, c'est que l'erreur arrive après la fin du script. Les lignes de debug sont formelles...
 
Voici les versions :
 
php -v
PHP 5.3.3 (cli) (built: Jan 20 2011 06:13:52)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
 
apachectl -v
Server version: Apache/2.2.3
Server built:   Jun 16 2011 11:26:48
 
cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.7 (Tikanga)
 
 
Si quelqu'un a déjà rencontré ce type d'erreur, je serais ravis qu'il me partage sa résolution si il en a trouvé une  :D  
 
 :hello:


Message édité par jesusdebethune le 09-08-2013 à 15:03:39
Reply

Marsh Posté le 09-08-2013 à 15:02:38   

Reply

Marsh Posté le 09-08-2013 à 15:21:04    

Je pense que le problème viens de ton code, tu dois avoir une boucle qui remplis mal un tableau et du coup le buffer explose, c'est surement un problème d'écriture d'algo,  
 
Le problème arrive souvent quand on traite de grand nombre de données sans regarder l'optimisation (dans mon cas)
 
Bonne chance

Reply

Marsh Posté le 09-08-2013 à 15:44:47    

Merci pour la réponse.
j'ai déjà exploré cette piste, et comme expliqué plus haut, la requête retourne trop peu de données pour demander 42To de mémoire.
 
En plus, cette erreur apparaît après l’exécution du script qui se termine bien...

Reply

Marsh Posté le 09-08-2013 à 16:01:33    

Cette erreur n'apparait uniquement quand le buffer php est plein,  
 
possibilité pour résoudre le problème :
 

  • Augmenter la taille du buffer dans le php.ini (Ici allouer 42To....)
  • Revoir l'algo (surtout au niveau du traitement des infos (optimisation des tableau php))
  • vider le buffer avant la fin d'exécution du script (Attention au variables "magique" (globale,...))
  • Afficher l'état du buffer durant l'exécution du script


En espérant pouvoir aider

Reply

Marsh Posté le 09-08-2013 à 16:32:41    

j'ai ajouté plein de "memory_get_usage()" dans le script pour voir la consommation tout au long de l'execution et les logs me donnent ça :
 
[09/08/2013 11:13:38;] Debut du fichier 5204b2c239759, memory : 1048576
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] APP_ID:38089,DNIS:820002378,DPT:76
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 38089
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 820002378
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 76
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 38089
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 744120
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 743504
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 744296
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 743680
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 744472
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 743856
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 745032
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 744416
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 745208
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 744592
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 745384
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] 744768
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] Requete primaire = SELECT was.PRIMARYIPADDRESS A, was.rootDirectory B, voi.name C FROM VoicesApplications voi,WebApplicationServers was WHERE voi.idWas = was.idWas and voi.IDVOICEAPPLICATION = 38089;
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] URL client primaire = http://195.6.107.97/260/CESU/index.vxml
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] Requete secours = SELECT was.secondaryipaddress A, was.rootDirectory B, voi.name C FROM VoicesApplications voi,WebApplicationServers was WHERE voi.idWas = was.idWas and voi.IDVOICEAPPLICATION = 38089;
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] URL client secours = http://195.6.107.99/260/CESU/index.vxml
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] Fin du fichier 5204b2c239759, memory : 1048576
[09/08/2013 11:13:38;{8B4A4698-F8AA-4580-BBA8-A7B37E778092}] Fin reel du fichier 5204b2c239759, memory : 1048576
[Fri Aug 09 11:13:38 2013] [error] [client 10.105.48.4] PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 47131846053256 bytes) in Unknown on line 0

Reply

Marsh Posté le 09-08-2013 à 16:49:10    

Dernière solution que je peux te proposer et de regarder du coté du framework Yii qui permet des optimisations
 
tiens moi au courant de l'évolution.

Reply

Marsh Posté le 09-08-2013 à 16:53:58    

Tu pourrais poster ton code, svp ?
 
Vue la taille demandée que tu pourras jamais allouée (42 To  :ouch: ), y'a clairement un pb de boucle infinie ou de récursivité. Ou alors, ta requête SQL retourne des millions de petits enregistrements.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed