Bonjour,
J'ai un script qui utilise pas mal de mémoire (>10Go), et je voudrais connaitre la part de chaque variable (hash, et objet) à une certaine position du script.
Sauriez vous comment proceder ?
Z.
Bonjour,
J'ai un script qui utilise pas mal de mémoire (>10Go), et je voudrais connaitre la part de chaque variable (hash, et objet) à une certaine position du script.
Sauriez vous comment proceder ?
Z.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
J'obtiens un 'out of memory!' avec ce code :
Sachant que NanoAlign est un objet, et que $NanoAlign->{_PROBES_MAPPED} est un énorme hash.
Code : Sélectionner tout - Visualiser dans une fenêtre à part print total_size($NanoAlign->{_PROBES_MAPPED}), "\n";
Est ce lié a cet aspect de Devel::Size ?
Precision niveau mémoire : mon script semble utiliser au max env 11go de mémoire (il dure longtemps, alors je ne peut pas dire s'il yn a un pique a un moment), et la becane dispose jusqu'a 32Go, mais en général environ 25Go sont libres.Envoyé par CPAN
Z.
possible. Essaye de tester d'autres variables. Et d'ailleurs, t'as pas moyen de faire autrement ? Car un script qui consomme 10 Go de mémoire, ça craint un peu non !!!
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
C'est presque le genre de situation de débugage où il faut avoir un Perl compilé avec DEBUGGING_MSTATS ou mieux avec DDEBUGGING sous la main. Tu peux alors utiliser mstat() avec Devel::Peek.
non, j'ai plus ou moins le choix. En tres gros, je parse un fichier de 1.4go. Mais par la suite, ce fichier pourra être encore plus gros.
Mais je voudrais connaitre les max que j'atteinds, et surtout dans quelles conditions.
J'ai jamais utiliser le debugger. Je vais creuser dans cette voie.
Z.
La taille du fichier a parser n'est pas le souci, mais la façon dont tu t'y prends ! Peux t on en savoir plus ?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Pas de soucis !
Pour remettre ceci dans le contexte. Ce script a été developper pour un projet européen. Ayant de la ressource informatique, nous n'avons pas chercher a optimiser cette application.
Actuellement, nous reflechissons à generaliser ces scripts afin de valoriser ce travail.
Voici le code brute de décoffrage :
Et voici un extrait du fichier à parser (actuellement : 20530675 lignes, pour 1.4G) :
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 sub parse_mapping { my $this = shift; my $handle = $this->_open_file($this->{SEQMAP_FILE}); my $i = 0; while ( my $line = $this->_next_line($handle) ) { $i++; my @temp = split("\t", $line); my @miss; my $mm = $temp[5]; my $oligo = $temp[4]; my $strand; if ($temp[6] eq '+') { $strand = 1; } else { $strand = 0; } #insert into result hash $this->{_PROBES_MAPPED}{$oligo}{$mm}{$temp[0]}{$temp[1]}{$strand} = 1; } close $handle; return $i }
Ces données sont par la suite insérées dans une base de donnée (certainement SQLite pour être portable sur tous les environnements).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 trans_id trans_coord target_seq probe_id probe_seq num_mismatch strand M73258_unc_unc 1 TATGTATGTTGCACTGTCCC 47391 TGTGTGTGTTGCAATGTCCC 3 + M73258_unc_unc 1 TATGTATGTTGCACTGTCCC 147689 TATGTGTGCTGCCATGTCCC 4 + M73258_unc_unc 1 TATGTATGTTGCACTGTCCC 198381 TATGTATGTTGCACTGTCCC 0 + M73258_unc_unc 1 TATGTATGTTGCACTGTCCC 350633 TATGTGTGTTGCAGTGTCCC 2 + M73258_unc_unc 1 TATGTATGTTGCACTGTCCC 376085 TATATATGTTGCAGTGTCCC 2 + M73258_unc_unc 1 TATGTATGTTGCACTGTCCC 609890 TATATATGTTGCAATGTCCC 2 + M73258_unc_unc 1 TATGTATGTTGCACTGTCCC 680106 TATATATGTTGCACTGTCCC 1 + M73258_unc_unc 1 TATGTATGTTGCACTGTCCC 693815 TATGTGTGTTGCACTATTCC 3 + M73258_unc_unc 1 TATGTATGTTGCACTGTCCC 718854 TATGTGTGCTGCAATGTCCC 3 +
Si mes recherches d'optimisations sont infructueuses, j'envisage de traiter séquentiellement ce fichier.
Le souci est que certains cas particuliers pourront toujours aboutir à une occupation importante de la mémoire, que je voudrais tester.
Z.
Je vais essayer d'optimiser mon hash sur le plan de l'ordre des clés.
Certaines ont beaucoup moins d'occurences que d'autres. Je pense qu'il est donc plus interessant d'avoir les clés les moins variables à la base du hash, et de terminer par les plus variables.
QU'en pensez vous ?
Z.
Concrètement, tu fais quoi sur ce fichier ? Tu le mets entièrement en mémoire ?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Oui, je mets chaque ligne en mémoire dans un hash, pour traitement.
Mes tentatives pour optimiser le tableaux n'ont mener a rien (je m'en doutais)...
Je vais donc essayer de decouper intelligement mon fichier. Ca aidera dans beaucoups de cas, mais certains pourront tjrs poser probleme.
Z.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager