Hi Ivan,
It's not really mod_perl, but is relevant to people on the list I guess...
If you really play aorund with this, you'll find some interesting variations.
If I assign $cc using a for loop
my $c;
for ( 1..20000000) { $cc .= 'a'; }
it's a lot slower, but only uses half as much ram
also if I do the assignment first and then add a char:
my $a = $cc; # allocates 20 more Mb for right part
p( "assigned a" );
$a .= 'x';
p( "changed a" );
undef $a; # deallocates $a
p( "undefed a" );
my $b = $cc; # allocates 20 more Mb for right part
$b .= 'a';
# and reuses deallocated 20Mb for b
p( "defined b" );
undef $b;
p( "undefed b");
sub p {
my $mesg = shift;
print "$mesg used memory = ".(BSD::Resource::getrusage)[2]."\n"
}
I get:
assigned a used memory = 40212
changed a used memory = 40212
undefed a used memory = 40212
defined b used memory = 40712
undefed b used memory = 40712
Which is more what you would hope to see right?
andrew
On Thu, 07 Dec 2000, Ivan E. Panchenko wrote:
>
>
> Today I discovered a strange behaiviour of perl,
> and I wonder if anybody can tell me what to do with it.
>
> The matter is that perl DOES NOT REUSE MEMORY allocated for
> intermediate calculation results. This is specially harmful to
> data-intensive modperl applications where one perl process processes
> many queries and can leak great amount of memory.
>
> The example is below:
>
> use BSD::Resource;
> my $cc = 'a' x 20000000 ; # alocates 20Mb for the right part and
> # 20Mb for $a
> &p;
> { my $a = $cc.'x'; # allocates 20 more Mb for right part
> # and 20 for a
> &p;
> undef $a; # deallocates $a
> }
> &p;
> { my $b = $cc.'y'; # allocates 20 more Mb for right part
> # and reuses deallocated 20Mb for b
> &p;
> undef $b;
> }
> &p;
>
> sub p {
> print STDERR "used memory = ".(BSD::Resource::getrusage)[2]."\n"
> }
>
> # end of example.
> Output:
> used memory = 40772
> used memory = 79804
> used memory = 80068
> used memory = 99676
> used memory = 99700
> ##
> Here I used BSD:Resource to measure consumed memory. Its result seems to
> be correlated with the amount of memory taken by the process from the OS.
> #
>
> This was checked on FreeBSD 3.4 and 4.2 ; and perl5.00405 5.00503 .
> Same things where noticed on Linux and probably on Solaris too.
>
> Ivan
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
...............................................................................
Andrew Wyllie <[EMAIL PROTECTED]> Open Source Integrator
v.206.729.7439 __We can catify or stringify,
c.206.851.9876 separately or together!__ perl-5.005_03
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]