PHP Fatal error - Allowed memory size exhausted - PHP - Programmation
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
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...
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 :
En espérant pouvoir aider
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
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.
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 ), y'a clairement un pb de boucle infinie ou de récursivité. Ou alors, ta requête SQL retourne des millions de petits enregistrements.
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 :
[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
Message édité par jesusdebethune le 09-08-2013 à 15:03:39