Ztracejici se pamet
Roman Fordinal
fordinal na slovanet.sk
Pátek Listopad 15 08:05:42 MET 2002
Thursday, November 14, 2002, 9:00:25 PM, you wrote:
PS> Zdravim vespolek.
PS> Mam nasledujici pokusny kod:
PS> $ cat mem.pl
PS> #!/usr/bin/perl -w
PS> use strict;
PS> warn "perl $] on $^O\n";
PS> my ($tmp, %tmp);
PS> $tmp{$tmp} = " " x 100 while ++$tmp < 50000;
PS> warn `ps -p $$ -o vsz=` =~ /(\d+)/, "\n";
PS> foreach (keys %tmp) {
PS> warn `ps -p $$ -o vsz=` =~ /(\d+)/, "\n" unless $tmp++ % 10000;
PS> s/./x/;
PS> }
PS> warn `ps -p $$ -o vsz=` =~ /(\d+)/, "\n";
PS> $ ./mem.pl
PS> perl 5.006001 on linux
PS> 12912
PS> 15028
PS> 15188
PS> 15348
PS> 15508
PS> 15672
PS> 15828
PS> Podobne se to chova i na jinych operacnich systemech (irix, solaris) i s
PS> jinymi verzemi perlu (5.4, 5.8).
PS> Jednak by me zajimalo, proc mu utika pamet pri blbem nahrazovani znaku za
PS> znak.
PS> Taky mi ale vadi ztrata pameti pri foreach pres klice hashe. Lze nejak
PS> prochazet klice hashe, aniz by dochazelo k teto ztrate? Zrejme z nich udela
PS> pole, to ja ale k nicemu nepotrebuji, stacilo by mi je jakkoli dostavat
PS> jeden po druhem.
PS> Diky P.
s tymto istym mam problem pri fastcgi scriptoch, najvacsi narast sa
objavuje pri vyuzivani kniznice MySql.pm
i ked som sa to pokusal riesit velmi dlhu dobu, nepodarilo sa mi
problem nikdy vyriesit. jednoducho Perl neuvolnuje pamat pre dalsie
premmenne a co je divne dokonca i pri opakovanom vyuzivani objektov
zahlcuje stale viac a viac pamat (MySQL.pm)
zahlcovanie pamate som ciastocne znizil pouzivanim rovnakych
premmennych v jednotlivych sub {}, ktore som lokalizoval pomocou my.
viac som nedokazal a nikdy som ani nedostal uspokojivu odpoved na to
preco tomu tak je. (nepomohli ani hracky s undef, DESTROY object a
delete) :(
:
:.. Roman Fordinal
:.: fordinal na slovanet.sk
Další informace o konferenci Perl