Memory get usage

cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009 - 24 avril 2008 à 09:56
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009 - 25 avril 2008 à 08:18
Bonjour,

J'ai un problème de fuite !!

J'ai un script PHP qui tourne en fond sans Firefox (php5 monscript.php). Il récupère des fichiers sur d'autres machines et il insere des valeurs dans une base de données MySQL toutes les 7 secondes.

La fonction Memory_get_usage me donne une valeur qui croit avec le temps et fini par passer en négatif (signification ????)

Et ce que cette fonction est sérieuse ?

Mon script finit par s'arrêter tout seul sans aucun message d'erreur, ni à l'écran, ni dans les logs, ni dans mon système de gestion d'erreurs (try, catch + log).

Il y a plusieurs jour que je cherche, mais rien !!

Est ce quelqu'un aurait une idée ?

Merci

FAB (On ne peut pas aller au delà des choix qu'on ne comprend pas)

8 réponses

cephalic Messages postés 38 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 25 avril 2008
24 avril 2008 à 10:32
Ta valeur qui croit et qui passe en négatif est surement du a un overflow.
Pour taider il nous faudrai voir ton script
0
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009
24 avril 2008 à 11:36
Oui, il y a plusieurs pages de code !

Le script principal ressemble à ça :

while (1) {

    $machine1 = new tp_test();
    if (info_machine ($machine1)){
        filtre ($machine1->destination_file);
    }
    $machine2 = new mdt_test();
    if (info_machine ($machine2)){
        filtre ($machine2->destination_file);
    }
    $machine3 = new xls_guard();
    if (info_machine ($machine3)){
        filtre ($machine3->destination_file);
    }
    $machine4 = new hub_test();
    infos_reseau($machine4);
    infos_reseau($machine1);
    infos_reseau($machine2);
    infos_reseau($machine3);
    
    sleep (7);
    unset ($machine1);
    unset ($machine2);
    unset ($machine3);
    unset ($machine4);
}

?>


Je pense qu'il faudrait la totalité mais trop de ligne !!

FAB (On ne peut pas aller au delà des choix qu'on ne comprend pas)
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
24 avril 2008 à 13:25
faut croire que php gere mal la memoire :)

a mon avis, t'y peux pas grand chose (sauf si t'as des sock qui sont ouvert, mais pas clos, ou des trucs du genre)
0
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009
24 avril 2008 à 16:07
Et simplement la réponse négative de Memory_get_usage () c'est pas documenté, peut-être que quelqu'un connait ?

Merci

FAB (On ne peut pas aller au delà des choix qu'on ne comprend pas)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 avril 2008 à 19:01
Hello,

quelle version de PHP 5 ?
0
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009
24 avril 2008 à 20:02
D'après phpinfo : PHP Version 5.2.0-8+etch10




A-t-elle un soucis cette version ?




Merci





FAB (On ne peut pas aller au delà des choix qu'on ne comprend pas)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 avril 2008 à 20:21
La valeur négative dans memory_get_usage() a été corrigée avec php 5.2.1
Néanmoins, je ne pense pas que ça ait un rapport direct avec ton problème.
A mon avis, ton script s'arrête à caused'un timeout() OU d'un trop plein de mémoire utilisée en effet (mais aucun rapport avec la valeur négative qui n'était, semble t il, qu'un problème de calcul).
Tu devrais voir ou tu peux optimiser ton code (il y a toujours moyen, surtout sur un long code). Vérifie aussi que tu es bien en error_reporting(E_ALL).
Enfin, puisque tu n'as rien d'affiché, logge les actions dans un fichier (avec la ligne évidemment, et un descriptif de ce que tu fais à ce moment là) : tu verras au moins où s'arrête ton script.
0
cs_ntrvdonett Messages postés 20 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 4 janvier 2009
25 avril 2008 à 08:18
Oui j'avais eu l'idée, et j'ai écrit un système poussé de gestion des erreurs, j'ai error_reporting(E_ALL), et un fichier log juste pour mon script.

Cette nuit !! je me disais : pour faire tourner mon script sans explorateur j'ustilise PHP5-CLI ! C'est surement different de PHP5 utilisé avec l'explorer.

J'ai décidé de faire tourner le script sur une autre machine pour comparer ? On vera

Merci

FAB (On ne peut pas aller au delà des choix qu'on ne comprend pas)
0
Rejoignez-nous