Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes [ Archives / Divers ] (arnal69130)

mercredi 5 octobre 2005 à 17:54:21 | [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

arnal69130

Bonjour à tous,
Je développe un site en php d'une dizaine de pages. Il tourne sous Apache2+php5 sur w2k. La plupart du temps tout fonctionne bien, mais de temps en temps, en ajoutant certaines instructions php (qui semblent vraiment anodines), Apache plante en affichant une fenêtre
Application popup : Apache.exe - Erreur d'application : L'instruction à "0x00837ca8" emploie l'adresse mémoire "0x05f71000". La mémoire ne peut pas être "read".
Cliquez sur OK pour terminer le programme.

Pas très explicite ! pas d'erreur php...

Alors je triture le code php pour ne pas utiliser telle ou telle syntaxe, et j'arrive à contourner comme ça le problème. Mais dès que j'implémente une nouvelle fonctionnalité, je retombe là-dessus.

Par exemple, tout fonctionnait bien, et j'ai ajouté ceci :
« while($ligneResultat=odbc_fetch_array($res)) { echo 'test'; }»
et maintenant ça plante ! pourtant le résultat est valide.

Dans le log d'erreur d'apache, il y a la ligne :
FATAL:  emalloc():  Unable to allocate 892350769 bytes


Si quelqu'un a une idée, merci de m'aider...

Arn;o)





mercredi 5 octobre 2005 à 18:13:43 | Re : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

J_G

FATAL:  emalloc():  Unable to allocate 892350769 bytes !!!!!!!!!!!!!!!

!!! Oooouach, ça arrache !!!

Une simple formule mathématique va t'expliquer le problème :
892 350 769 bytes / (2^20) = 851,01201 Mo

Es-tu sûr d'avoir l'espace nécessaire en RAM ?

Question optimisation :
Il faut savoir que foreach() duplique les tableaux, alors que each() non !
_fetch_array() te sort la concaténation de _fetch_assoc() et _fetch_row()


mercredi 5 octobre 2005 à 21:14:40 | Re : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

Anthomicro

Salut,

une boucle infinie ailleurs peut-être ? un virus sur ta machine ?



    jeudi 6 octobre 2005 à 00:37:12 | Re : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

    FhX

    mysql_fetch_array($query,MYSQL_ASSOC)

    Et la, plus de problème :)

    jeudi 6 octobre 2005 à 10:08:35 | Re : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

    arnal69130

    Merci à tous pour vos idées.

    Je vais vérifier toutes mes boucles, et optimiser mon code selon les suggestions de J_G. C'est vrai que j'utilise très souvent foreach(), je ne savais pas qu'il fallait éviter...

    Ce qui m'étonne, c'est que si j'avais fait une boucle infine, il devrait normalement y avoir une erreur php de max_execution_time, non ? Voici ma config à ce sujet (dans php.ini, c'est celle par défaut !)

    ;;;;;;;;;;;;;;;;;;;
    ; Resource Limits ;
    ;;;;;;;;;;;;;;;;;;;
    max_execution_time = 30     ; Maximum execution time of each script, in seconds
    max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
    memory_limit = 8M      ; Maximum amount of memory a script may consume (8MB)

    A croire qu'Apache n'en tient pas compte ?

    En tout cas, c'est clair une telle demande de mémoire n'est pas acceptable par la machine, et encore, je suis en mode test et je suis le seul visiteur ! Ce qui est bizarre c'est que dans le gestionnaire de processus de Windows, le processus Apache ne prend jamais plus de 7 ou 8 Mo...



    Sinon, j'utilise les sessions, alors j'avais pensé que je mémorisais trop de chose dans mes sessions, mais les fichiers créés dans le répertoire temporaires ne dépassent pas les 170 Ko !
    J'ai aussi essayé en revenant à Apache 1, même problème.

    Je ne pense pas avoir de virus, j'ai un AV à jour (SophosAV) et je teste toute la machine tous les jours...

    FhX, j'utilise une connexion odbc et pas mysql, alors la fonction est odbc_fetch_array()... les arguments ne sont pas les mêmes que mysql_fetch_array(). Merci qd même.
    J_G, odbc_fetch_assoc() ça n'existe pas ;o)
    En fait, même si j'utilise odbc_fetch_object() ça plante...

    jeudi 6 octobre 2005 à 10:11:09 | Re : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

    arnal69130

    Je viens d'essayer avec odbc_fetch_row directement, et ça ne plante plus ! super, pourvu que ça dure ;o)
    Merci encore à tous les 3.
    A+
    Arn;o)

    jeudi 6 octobre 2005 à 10:27:58 | Re : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

    arnal69130

    :-s
    En fait ça marche pas, je me suis emballé pour rien, désolé...

    jeudi 6 octobre 2005 à 10:41:24 | Re : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

    arnal69130

    Le plus pénible pour trouver la source de l'erreur, c'est que
    - si j'enlève le bout de code en question, ça marche
    - si je le mets avec tout le reste du code, ça plante
    - mais si je ne mets que ce bout de code (plus la connexion à la base), ça ne plante pas !

    Voici un peu plus de code, si jamais ça vous inspire : 
    $_SESSION['connexion']=odbc_connect("blablabla","","") or die("Erreur de connexion".odbc_errormsg());
    $req="SELECT blablabla FROM blablabla WHERE blablabla ";
    $res=odbc_exec($_SESSION['connexion'],$req);
    if (!empty($res)) {
       $nbChamps=odbc_num_fields($res);
       echo '<br />---<br />';
       while(odbc_fetch_row($res)) {
          for ($i=1; $i<=$nbChamps; $i++)
          echo odbc_field_name($res,$i).'='.odbc_result($res,$i).'<br />';
       }
       odbc_free_result($res);
    }
    exit;

    et toujours les mêmes logs pour Apache (mais la mémoire requise a augmenté !) :
    [Thu Oct 06 10:38:12 2005] [notice] Parent: child process exited with status 3221225477 -- Restarting.
    [Thu Oct 06 10:38:13 2005] [notice] Apache/2.0.54 (Win32) PHP/5.0.5 configured -- resuming normal operations
    [Thu Oct 06 10:38:13 2005] [notice] Server built: Apr 16 2005 14:25:31
    [Thu Oct 06 10:38:13 2005] [notice] Parent: Created child process 872
    [Thu Oct 06 10:38:14 2005] [notice] Child 872: Child process is running
    [Thu Oct 06 10:38:14 2005] [notice] Child 872: Acquired the start mutex.
    [Thu Oct 06 10:38:14 2005] [notice] Child 872: Starting 250 worker threads.
    FATAL:  emalloc():  Unable to allocate 1920220171 bytes
    [Thu Oct 06 10:38:18 2005] [notice] Parent: child process exited with status 3221225477 -- Restarting.
    ...

    Je me penche sur les foreach...

    Arn;o)

    jeudi 6 octobre 2005 à 14:08:23 | Re : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

    malalam

    Administrateur CodeS-SourceS
    De toutes évidences, il y a un truc qui bouffe BCP de ram, là... 1920220171 bytes, ça fait très très beaucoup...
    Et si ça ne venait pas de ton script, mais de ton système ? Il y a peut-être une tâche un peu bizarre qui tourne, et qui peut-être interfère avec apache.



    jeudi 6 octobre 2005 à 15:32:20 | Re : [Apache] FATAL: emalloc(): Unable to allocate 792474677 bytes

    J_G

    Réponse acceptée !
    Salut,

    Dis moi ... T'es dans un plan galère là !?!
    Voyon voâr !


    memory_limit = 8M      ; Maximum amount of memory a script may consume (8MB)
    +
    le processus Apache ne prend jamais plus de 7 ou 8 Mo
    =
    Le php.ini sert bien à quelque chose. C'est pas apache qui demande 2 Go de RAM
    ET
    Ca pourrait être la raison de l'erreur, "Apache :Allouer 2 Go !!! T'es pas dingue... Moi j'me casse!"
    Donc il n'y a pas d'erreur dans ton script... (ce qui n'arrange pas l'affaire)

    J'aurai une piste de réflexion : l'erreur provient de ta requète... Donc du code SQL, c'est là que serait la "boucle infinie".

    Je m'explique :
    Ta base de données, et en particulier son analyseur de SQL, est un process indépendant d'Apache. Donc qui ce fout roal de php.ini.
    Si tu fais une requète de taré genre
    SELECT *
    FROM tablePouet as t1, tablePouet as t2
    WHERE t1.id != t2.id
    La tu auras tout les croisements possible des champs de la table. Soit une table de taillle !N si tablePouet contient N champs. Truc ouf koi !!!

    Tu me vois venir ?

    Bon... ODBC il s'en fout lui... Il n'a pas de limite d'allocation configurée (si ce n'est la limite autorisée par windows). Donc il en pose un peu partout... Bref il s'arrange et on s'en fout de comment. Mais il renvoit un lien vers le resultat. "Voici votre numéro de compte client à rapeller lors de toutee communication ;)"

    Mais quand tu demande à Apache de récupérer les données pour les parser, ligne par ligne. Il demande à ODBC "fille moi le paquet et je m'arrange avec". ODBC répond : "pas de problème ça fait 2Go". La suite tu la connais.

    Voilà pourquoi ça plante quand tu fait odbc_fetch_array()

    Donc révise ta SQL....






    1 2 3

    Cette discussion est classé dans : php, apache, fatal, unable, emalloc


    Répondre à ce message

    Sujets en rapport avec ce message

    configuration Apache MySQL pour prog PHP [ par NoviceSix ] 8-) Bonjour TLM,Je souhaite débuter en PHP, j'ai donc téléchargé EasyPHP pour l'installer sous WINDOWS 2000ME. Les outils MySQL et Apache sont install Plizz de l'aide!!! =) [ par Xime ] au secours!!!! :)voila je viens d'installer un serveur apache sur ma machine juskici ca tourne correct j'arrive a voir la page d'apache.mais apres j'i ARG ! > MySQL: Unable to save result set in ... [ par antares7364 ] Bonjour,Un problème est survenu dans une de mes tables MySQL :lorsque j'essaie d'en afficher le contenu avec PHPMyAdmin ou par unautre script PHP, MyS Prob Installation PHP [ par neocide ] [_]NEOCIDE[_]Salut!Je suis sous WinMe et j'ai installé Apache et PHP mais je n'ai pas trouver la dll qui permet de mettre PHP en module sous Apache.Où PHP et Apache [ par vincenteraptor ] Bonjour,Je début dans le monde PHP et j entends partout dire que PHP fonctionne avec Apache! Alors voici ma question : PHP se limite t il aux serveurs pb php/apache [ par glipper ] Bonjour, Je viens de monter un serveur apache (V1.3) et d'installer php4.3.2 (depuis php.net) sur mon pc qui tourne sous Win2000Pro. Mon serveur marc pb installation serveur [ par eax ] salutg qq soucis avec l'installation de php 4.3.3 sous apache 2.0.47 sous windows xp (sp1)apache n'arrive pas à charger php4apache2.dll, il me dit que pbs apache v2 + php [ par mojira ] bonjours a tous ,j'ai un petit probleme sous linux ( red hat 8.0 )en effet apache comprend pas le php :aucune erreur s'affiche , mais c'est une parti Aide finalisation Apache-PHP-MySQL [ par DreamPush ] Bonsoir,J'ai le serveur Apache v2.0.49, PHP v5.0.0RC1 et MySQL v5.0.0a-alpha pour Windows.Apache et PHP marchent très bien ensemble sur mon ordi XP. D Help ! Apache-Php-Windows+AOL [ par toni ] Je viens d'installer un serveur Apache avec Windows 2000 etAOL comme connection distante.Mes premiers tests en localhost, avec des pages en Phpfonctio


    Nos sponsors

    Sondage...

    CalendriCode

    Juillet 2009
    LMMJVSD
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  

    Consulter la suite du CalendriCode

    Téléchargements

    Logiciels à télécharger sur le même thème :

    Comparez les prix Nouvelle version

    Photothèque Nouveau !



    Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
    CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
    CodeS-SourceS.com© est une marque déposée tous droits réservés
    Temps d'éxécution de la page : 0,655 sec

    Google Coop CodeS-SourceS Google Coop CodeS-SourceS


    Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.