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

Programmation et administration système Perl Discussion :

gestion de la memoire


Sujet :

Programmation et administration système Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut gestion de la memoire
    Bonjour.
    Pour faire tourner un programme, je charge une grosse quantité d'information dans un hash en mémoire vive, ce qui met un certain temps à charger .. Normal.
    Ensuite je peux faire tourner sans problème et lorsque je fais exit, j'ai remarqué que le programme mettait aussi un peu de temps pour me rendre la main . Temps qui peut nettement s'allonger si j'utilise longtemps le programme.. Normal, je suppose qu'il y a du nettoyage à faire.

    Mais si j'appelle ce programme A à partir d'un programme B et que je fais exit dans le programme B perl me rend immédiatement la main...
    et là je me dit que c'est pas normal, que certainement le hash du programme A n'est pas nettoyé.
    Bref ma question est : comment quitter proprement le programme A à partir du programme B.

    JE RECTIFIE MON MESSAGE !
    j'ai dit une bêtise, le temps pour quitter est toujours là, j'ai parlé trop vite... toutes mes excuses
    mais la question du comment quitter proprement reste posée.
    par exemple serait 'il utile de faire un %hash=(); avant de sortir ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par vidici Voir le message
    par exemple serait 'il utile de faire un %hash=(); avant de sortir ?
    Je dirais non... vu que perl va faire la même chose en interne (garbage collection).

    En revanche, tu lances ton programme B par le biais d'une commande system ? Je ne sais pas trop dire si cela ferait une grosse différence d'utiliser le programme A comme un module perl invoqué par le programme B (sous forme objet ou fonctionnel d'ailleurs, peut importe).
    Quelqu'un aurait un retour d'expérience sur cette question ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    En revanche, tu lances ton programme B par le biais d'une commande system ?
    en fait j'ai essayé au départ dans une phase de test, mais j'avais des erreurs au niveau du passage des arguments, et donc je suis passé directement à la solution moose.
    pour la petite histoire, j'ai déja oublié le programme ouvert pendant presque une journée, et il a fallut pas loin d'une demi heure pour que perl me rende la main, quand je me suis décidé à le couper.

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vidici Voir le message
    pour la petite histoire, j'ai déja oublié le programme ouvert pendant presque une journée, et il a fallut pas loin d'une demi heure pour que perl me rende la main, quand je me suis décidé à le couper.
    Une demi heure? Cela me paraît bien étrange. Deux questions: il fait quoi, ton programme, quand tu le laisses tourner ainsi une journée entière? Et tu fais comment au juste pour "le couper"?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    ceux qui me connaisse savent que j'exagère toujours un peu quand il s'agit de chiffres, mais quand même .. ça peut être très long.
    Citation Envoyé par Lolo78 Voir le message
    il fait quoi, ton programme, quand tu le laisses tourner ainsi une journée entière?
    ben, il fait rien, il attend que je lui demande quelque chose au travers d'une entrée utilisateur. Et pour couper, le programme arrive à la ligne exit 0 et voilà. je ne connais pas d'autre moyens ?

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Tu attends simplement que l'utilisateur saisisse quelque chose. Puis quand l'utilisateur le fait, le programme fait certaines choses et sort, c'est cela? Je ne vois pas du tout comment cela pourrait à conduire des délais de sortie même simplement mesurables. Tu peux montrer ton code?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Tu attends simplement que l'utilisateur saisisse quelque chose. Puis quand l'utilisateur le fait, le programme fait certaines choses et sort, c'est cela? Je ne vois pas du tout comment cela pourrait à conduire des délais de sortie même simplement mesurables. Tu peux montrer ton code?
    ça va m'être difficile... il y a maintenant de nombreuses classes objets, avec de l'heritage etc..
    en fait chaque fois qu'un objet est crée il reçoit une référence a un hash qui contient un gros volumes de données. Je suppose qu'à la fin ça doit faire un sacré fouillis dans la mémoire de l'ordi qui l'utilise lui même aussi pour d'autres tâches. D'où le temps pour quiter.
    En fait ça ne m'inquiète pas plus que ça, ça n'a rien à voir avec une boucle infinie qui fait hurler la machine.

    je met quand même le code d'init si (mais c'est brouillon)
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #!/usr/bin/perl5.16
    #one.pl;
    use encoding::source 'utf8';
    binmode(STDOUT, ":utf8");
    binmode(STDOUT=>':encoding(utf8)');
    use utf8;
    use strict;    # quote strings, declare variables
    use warnings;  # on by default
    use warnings  qw(FATAL utf8);    # fatalize encoding glitches
    use open      qw(:std :utf8);    # undeclared streams in UTF-8
    use feature qw(say);
    use Text::Unaccent::PurePerl qw(unac_string);
    use Seul;
    use Fabrique;
     
     
     
    my $fabrique = Fabrique->new();
     
    sub init
    {
            my $self = shift;
            my $nom_hbn;
            my $sujethbn;
            while (1) {
                    $nom_hbn='';
     
                    say "Quel hbn ? exit pour quitter";
                    $nom_hbn = <>;
                    chomp($nom_hbn);
                    if ($nom_hbn eq 'exit'){exit}
                    $nom_hbn = unac_string( 'iso-8859-1', $nom_hbn);
                    my $sp = Seul->new();
                    $sp->seul($fabrique, $nom_hbn);
                    #je cree le node adresse svg
                    ####################
                    say "un autre hbn : dites no pour quitter";
                    my $auto = <>;
                    chomp($auto);
                    if ($auto eq 'no'){exit}else{init($self)}
            }
     
    }
    init;
    exit 0

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    OK, je peux comprendre que ton programme charge un certain nombre d'objets en mémoire et que la libération de la mémoire à la fin prenne un peu de temps. Mais d'après ce que tu décris, il y a une grosse différence entre le cas où tu laisses le programme en attente d'une saisie de l'utilisateur pendant plusieurs heures et celui ou l'utilisateur réagit immédiatement. Et ça, je ne comprends pas, ça me paraît incompréhensible (j'allais dire impossible, mais je modère mon propos, c'est peut-être moi qui loupe quelque chose). Et même si tu as utilisé presque toute la mémoire disponible, je peux imaginer que ça prenne à la rigueur quelques secondes à désallouer, mais certainement pas des dizaines de minutes, même si le programme a swappé de la mémoire sur le disque.

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    As-tu contrôler la taille du la mémoire consommée par ton processus perl ? (avec "Process Explorer" de Sysinternals par exemple si tu es sous Windows) ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    même si le programme a swappé de la mémoire sur le disque.
    Il doit y avoir de ça.. quand je dis que programme ne fait rien, il a deja travaillé avant et garde en memoire pas mal de choses, de plus j'ai peut être ouvert une autre fenêtre du terminal et accédé au programme par d'autres moyen, notamment des requêtes sous forme de listes avec encore un hash de plus qui se crée.. des que je le pourrais je reprendrais tous mes codes, je les ais écris en apprenant et comporte certainement beaucoup d'erreurs, de répétitions, un peu comme le code que j'ai mis, je m'en rends compte, et je trouverais peut être..

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    As-tu contrôler la taille du la mémoire consommée par ton processus perl ? (avec "Process Explorer" de Sysinternals par exemple si tu es sous Windows) ?
    non, pas pour l'instant, mais pourquoi pas ultérieurement. Je vais essayer de trouver ce genre d'outils pour mac.

Discussions similaires

  1. Gestion de la memoire
    Par deeal dans le forum C++/CLI
    Réponses: 8
    Dernier message: 14/11/2006, 14h20
  2. Gestion de la memoire central d'un PC
    Par Bass_Room dans le forum C
    Réponses: 7
    Dernier message: 22/10/2006, 15h02
  3. gestion de la memoire en java
    Par jojob dans le forum Langage
    Réponses: 15
    Dernier message: 16/10/2006, 17h04
  4. Gestion de la mémoire.
    Par nicolas_faf dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 27/03/2006, 16h58
  5. [JVM]Gestion de la mémoire
    Par Crypt dans le forum Général Java
    Réponses: 20
    Dernier message: 31/12/2005, 14h33

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