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

Langage Perl Discussion :

(Ré)Allocation mémoire PERL


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut (Ré)Allocation mémoire PERL
    Bonjour à tous,

    Voilà, je vous explique le problème sur lequel j'ai déjà passé pas mal de temps sans trouver de solution possible, peut être pourrez-vous m'aider à avancer!

    J'ai réalisé un script qui est sencé tourner en continu sur un serveur de logs, qui analyse en continu les nouvelles lignes ajoutées au fichier de logs.

    Le principe de fonctionnement du script est de garder en mémoire certaines informations importantes, et de me faire un compte rendu toutes les heures, et de se supprimer la majorité des informations contenues en mémoire a chaque compte rendu qui m'est envoyé par mail.

    A chaque compte rendu envoyé, je supprime toutes les tables de hachage et toutes les références qui pourraient trainer. Et le problème arrive!

    En faisant un "top" sur le serveur, je vois par exemple le pourcentage mémoire utilisé qui monte jusque 10% en une heure, et lorsque qu'il me fait mon compte rendu et qu'il supprime les tables de hachage, le pourcentage mémoire utilisé stagne a 10%, et ne réalloue pas la mémoire utilisée par le script.

    Quelqu'un pourrait m'aider à réallouer cette mémoire, qui est réservée au script mais qui n'a plus aucune utilité pour celui-ci, afin que la mémoire soit à nouveau dispo pour le serveur?

    Merci aux courageux d'avoir lu mon roman jusqu'au bout, et j'éspère que vous aurez des idées!

    Tom

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    si ton script tourne en continu pourquoi stocké en memoire? pourquoi ne pas mettre ces infos dans un fichier temporaire que tu relit constamment!!!

  3. #3
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Perl a une politique : il ne rend jamais la mémoire qui lui est allouée.

    Cependant, au sein de son espace mémoire, il peut allouer et désalouer la mémoire des hashmaps, autrement dit si tu créées une hashmap qui fait 20 mo, que tu la supprimes en mémoire, et que tu la recrées, le process occupera toujours 20 mo.

    et, à moins d'avoir un 386 avec 8 mo de RAM, ce n'est pas un problème d'avoir 10% occupés en continu

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Par défaut
    Merci pour vos réponses!

    Djibril , je ne sais pas si c'est faisable, je t'explique pourquoi:

    Les logs sur lesquels je travaille sont alimentés comme ce qui suit:

    blablabla(...) "identifiant_de_dialogue" blablabla(...) "valeur1=xxx" blablabla(...)
    blablabla(...) "identifiant_de_dialogue" blablabla(...) "valeur2=xxx" blablabla(...)
    blablabla(...) "identifiant_de_dialogue" blablabla(...) "valeur3=xxx" blablabla(...)
    blablabla(...) "identifiant_de_dialogue" blablabla(...) "valeur4=xxx" blablabla(...)

    Le problème est que j'ai besoin de ces 4 lignes absolument pour pouvoir faire mon traitement, et que ces lignes ne se suivent presque jamais.

    Pour pouvoir réaliser les statistiques dont j'ai besoin, je dois avoir "concatener" ces 4 lignes en une seule, je m'explique:

    je crée un tableau de hachage, dans lequel ma clé est l'"identifiant_de_dialogue" , et je stoque les 4 valeurs dans $hash{$identifiant_de_dialogue}[0] , $hash{$identifiant_de_dialogue}[1], $hash{$identifiant_de_dialogue}[2] et $hash{$identifiant_de_dialogue}[3].

    Je suis donc obligé (enfin je pense) de garder mon tableau de hachage en mémoire.

    Ensuite je recrée une deuxième table de hachage qui me permet d'exploiter ces données contenues dans ma %hash. Une fois le traitement effectué, la table hash ne m'est plus d'aucune utilité.

    MarneusCalgarXP, sais tu si on peut allouer un espace max a une table de hachage? Parce qu'en fait j'ai fait un test qui amenait l'occupation mémoire à 10%, mais j'avais effectué ce test à un moment ou il n'y avait pas beaucoup de traffique, j'ai peur qu'en pleine activité, j'explose mon taux d'occupation cpu de 10% à 100% très vite?

    Tom

  5. #5
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Au boulot, sur 4 de nos serveurs, on a des process perl qui utilisent 100% de la RAM en permanence, mais je te rassure, ca n'empêche en rien la machine de tourner de manière stable, et les autres process qui tournent en parallèle ne ressentent pas de pénalités particulières

  6. #6
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Si tu veux limiter la taille mémoire, la solution que je peux te proposer est de te tourner vers java, qui dispose d'un mécanisme de limitation de mémoire, alors que Perl n'en dispose pas à ma connaissance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pb d'allocation mémoire malloc
    Par oz80 dans le forum C++
    Réponses: 5
    Dernier message: 18/11/2005, 17h23
  2. Limite Allocation Mémoire d'un tableau d'entier
    Par l9ft b9hind dans le forum C++
    Réponses: 5
    Dernier message: 27/10/2005, 19h29
  3. Allocation mémoire
    Par DestyNov@ dans le forum C++
    Réponses: 9
    Dernier message: 23/08/2005, 08h09
  4. [Pointeur] Allocation mémoire
    Par Rayek dans le forum Langage
    Réponses: 22
    Dernier message: 20/05/2005, 10h26
  5. Allocation mémoire dynamique
    Par ITISAR dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2005, 09h59

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