IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Apache me remplit la mémoire !


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de a028762
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 419
    Par défaut Apache me remplit la mémoire !
    J'ai un script qui utilise un objet dans lequel j'ai encapsulé des accès Mysql (genre PDO mais perso)
    je charge une table Oracle via ODBC (là , ce n'est pas encapsulé) puis
    crée une occurence d'un objet que je cree chaque fois que j'ai une ligne à créer (ou à modifier mais l'objet se débrouille)..
    Et là, je vois la mémoire d'un des deux process Apache augmenter jusqu'à des valeurs extrêmes (500Mo) sans que je comprenne ce qui se passe !
    Et en fin de boucle, j'ai beau ajouter un unset de l'occurence créee, cela ne change rien ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    function AjoutPiece($reference,$Indice,$Designation) { 
        $UnePiece = new Piece($Reference); 
        if ($UnePiece->Erreur <> "") { 
            $Message .= $UnePiece->Erreur."<br>"; 
        } else { 
            $UnePiece->Enregistrer(); 
            if ($UnePiece->Erreur <> "") { 
                $Message .= $UnePiece->Erreur."<br>"; 
            } else { 
                $UnePiece->Attribuer("Indice",$Indice); 
                if ($UnePiece->Erreur <> "") $Message .= $UnePiece->Erreur."<br>"; 
                $UnePiece->Attribuer("Designation",$Designation); 
                if ($UnePiece->Erreur <> "") $Message .= $UnePiece->Erreur."<br>"; 
            } 
        } 
        unset($UnePiece); 
    } 
    .... 
    while (odbc_fetch_into($Prepare,$Lignes)) { 
        $Reference        = $Lignes[0]; 
        $Indice            = $Lignes[1]; 
        $Designation    = $Lignes[2]; 
        $Message        = AjoutPiece($Reference,$Indice,$Designation); 
        if ($Message <> "") { 
            fputs ($Canal,$Message."\n"); 
        } 
        $Compteur = $Compteur + 1; 
    } 
    ....

  2. #2
    Membre expérimenté
    Inscrit en
    Janvier 2004
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 242
    Par défaut
    Tu fais un unset sur un object, sauf qu'un unset ça désaloue juste le pointeur, donc en fait, tu rends disponible ta variable, et l'objet reste en mémoire.

    Mais normalement tout les objets sont détruits en quittant le script.

    Donc réutilise le même object du début a la fin sans en créer un nouveau a chaque passage.

  3. #3
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    ou tu dois utiliser le destructeur de ta classe ... ce que je trouve + propre .

  4. #4
    Membre éclairé Avatar de a028762
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 419
    Par défaut
    Moi aussi, je trouve un __destruct plus propre ...
    mais j'osais pas ! ou plutot je pensais qu'un unset faisait la même chose
    Je vais essayer cela ...
    Merci d'avance

  5. #5
    Membre éclairé Avatar de a028762
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 419
    Par défaut Oui, c'est pas gagné !
    1- J'ajoute un __destruct comme indiqué :
    erreur car mon objet n'a pas de destructeur explicite
    2- Création d'un destructeur vide ....
    Rien ne change par rapport à la croissance mémoire et finalement je viens me planter sur une erreur encore plus bizarre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Catchable fatal error : Object of class Piece could not be converted 
    to string in C :\Documents and Settings\pouet pouet\piece.class.php on line 81
    ou la ligne 81 n'a strictement pas de rapport avec la question
    3 - Autre solution suggérée, Ben, mon objet, persistant je le rappelle,
    s'identifie par ses attributs à la création.
    Donc il ne peut être utilisé dans la boucle facilement ...
    C'est pas évident ...

  6. #6
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    tu pourrais envoyer le script php et indiquer ta version exact de PHP pour que je fasse des tests ?

    vu la gueule de l'erreur :
    -tu dois utiliser un systeme perso de gestion des exceptions qui rentre en conflit avec
    -ou le code dans le destructeur fait une chose qu'il ne doit pas faire ... si le destructeur est vide c'est encore + étrange

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/06/2010, 09h55
  2. Process Apache qui utilise trop de mémoire
    Par charline_irlande dans le forum Apache
    Réponses: 2
    Dernier message: 26/10/2009, 17h29
  3. Limite Apache en mémoire ?
    Par a028762 dans le forum Apache
    Réponses: 3
    Dernier message: 22/09/2009, 13h26
  4. [Apache] très gourmand en mémoire ?
    Par Invité dans le forum Apache
    Réponses: 2
    Dernier message: 23/06/2004, 09h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo