Szervusztok!
Egy kiragadott részlettel is (lentebb) sikerült előállítanom azt, hogy egy adathalmot olvasva, majd kicsit gereblyézve, folyamatosan nő a memória igénye a perl-nek. Próbálom a lehetőségeket számításba venni, de az utolsó találatnál megállt bennem minden.
- adatbázis
- undef @var;
- @var = ();
- perldoc -q "program shrinks"
Segítsetek kikerülni ebből, amit köszönök előre is!
Üdv,
vfero
#!/usr/bin/perl -w
use utf8;
use strict;
use locale;
use Switch;
use English;
use warnings;
use Env qw(@HOME $USER);
use Data::Dump::Streamer;
use List::MoreUtils qw(uniq);
use Term::ReadKey;
use List::Util qw(min max);
#---------------------------------------------
sub checkLimit($$$){
my ($p_a,$p_limit,$p_res) = @_;
foreach (@{$p_a}){
if($_ > ${$p_limit}){ push(@{$p_res}, $_) };
}
}
#---------------------------------------------
# MAIN
my @a = ();
# fill
for(my $c=0 ; $c < 100000 ; $c++){
$a[$c] = rand();
if(($c % 10000)==0) {print $c . "\n"}
}
my $limit;
my @res;
printf("Data filled %s, check the memory. ex.: memstat -w -p %s\n",$#a,$PID); ReadKey(0);
# check
foreach $limit(map { 0.01 * $_ } 1..100 ){
checkLimit(\@a,\$limit,\@res);
printf("limit %0.3f count %d\n",$limit, $#res );
@res=();
}
undef @res;
printf("Pls check again the memory usage. ex.: memstat -w -p %s\n",$PID); ReadKey(0);
exit ;
__END__
first
17012k: PID 1098 (/usr/bin/perl)
4352k( 0k): /usr/lib/locale/locale-archive 1098
16k( 8k): /usr/bin/perl 1098
3620k( 1536k): /usr/lib/libperl.so.5.18.2 1098
2068k( 12k): /usr/lib/perl/5.18.2/auto/Fcntl/Fcntl.so 1098
2064k( 12k): /usr/lib/perl/5.18.2/auto/Hash/Util/Util.so 1098
2068k( 16k): /usr/lib/perl/5.18.2/auto/IO/IO.so 1098
2380k( 328k): /usr/lib/perl/5.18.2/auto/re/re.so 1098
2076k( 20k): /usr/lib/perl/5.18.2/auto/List/Util/Util.so 1098
2084k( 32k): /usr/lib/perl/5.18.2/auto/Data/Dumper/Dumper.so 1098
2064k( 12k): /usr/lib/perl/5.18.2/auto/Filter/Util/Call/Call.so 1098
2060k( 8k): /usr/lib/perl/5.18.2/auto/Tie/Hash/NamedCapture/NamedCapture.so 1098
2120k( 60k): /usr/lib/perl/5.18.2/auto/B/B.so 1098
2080k( 28k): /usr/lib/perl5/auto/Term/ReadKey/ReadKey.so 1098
2064k( 12k): /usr/lib/perl5/auto/B/Utils/Utils.so 1098
2080k( 28k): /usr/lib/perl5/auto/Data/Dump/Streamer/Streamer.so 1098
2068k( 16k): /usr/lib/perl5/auto/PadWalker/PadWalker.so 1098
2128k( 72k): /usr/lib/perl5/auto/List/MoreUtils/MoreUtils.so 1098
3096k( 1044k): /lib/x86_64-linux-gnu/libm-2.19.so 1098
2064k( 12k): /lib/x86_64-linux-gnu/libdl-2.19.so 1098
2092k( 36k): /lib/x86_64-linux-gnu/libcrypt-2.19.so 1098
2152k( 100k): /lib/x86_64-linux-gnu/libpthread-2.19.so 1098
148k( 140k): /lib/x86_64-linux-gnu/ld-2.19.so 1098
3840k( 1768k): /lib/x86_64-linux-gnu/libc-2.19.so 1098
--------
67796k ( 5300k)
second
23804k: PID 1098 (/usr/bin/perl)
4352k( 0k): /usr/lib/locale/locale-archive 1098
16k( 8k): /usr/bin/perl 1098
3620k( 1536k): /usr/lib/libperl.so.5.18.2 1098
2068k( 12k): /usr/lib/perl/5.18.2/auto/Fcntl/Fcntl.so 1098
2064k( 12k): /usr/lib/perl/5.18.2/auto/Hash/Util/Util.so 1098
2068k( 16k): /usr/lib/perl/5.18.2/auto/IO/IO.so 1098
2380k( 328k): /usr/lib/perl/5.18.2/auto/re/re.so 1098
2076k( 20k): /usr/lib/perl/5.18.2/auto/List/Util/Util.so 1098
2084k( 32k): /usr/lib/perl/5.18.2/auto/Data/Dumper/Dumper.so 1098
2064k( 12k): /usr/lib/perl/5.18.2/auto/Filter/Util/Call/Call.so 1098
2060k( 8k): /usr/lib/perl/5.18.2/auto/Tie/Hash/NamedCapture/NamedCapture.so 1098
2120k( 60k): /usr/lib/perl/5.18.2/auto/B/B.so 1098
2080k( 28k): /usr/lib/perl5/auto/Term/ReadKey/ReadKey.so 1098
2064k( 12k): /usr/lib/perl5/auto/B/Utils/Utils.so 1098
2080k( 28k): /usr/lib/perl5/auto/Data/Dump/Streamer/Streamer.so 1098
2068k( 16k): /usr/lib/perl5/auto/PadWalker/PadWalker.so 1098
2128k( 72k): /usr/lib/perl5/auto/List/MoreUtils/MoreUtils.so 1098
3096k( 1044k): /lib/x86_64-linux-gnu/libm-2.19.so 1098
2064k( 12k): /lib/x86_64-linux-gnu/libdl-2.19.so 1098
2092k( 36k): /lib/x86_64-linux-gnu/libcrypt-2.19.so 1098
2152k( 100k): /lib/x86_64-linux-gnu/libpthread-2.19.so 1098
148k( 140k): /lib/x86_64-linux-gnu/ld-2.19.so 1098
3840k( 1768k): /lib/x86_64-linux-gnu/libc-2.19.so 1098
--------
74588k ( 5300k)