[Moscow.pm] mod_perl и утечки памяти
Alex Shatlovsky
shatlovsky на gmail.com
Чт Июл 30 02:53:15 PDT 2009
Привет,
Путем последовательного усечения выяснил, что проблема в
последовательности строк:
print STDERR "$ref\n";
next unless $ref;
Именно из-за нее вызов Devel::Size::total_size( $ref ) корректно
отрабатывает только один раз.
Второй раз возвращается 0.
Если поменять строки местами, то все отрабатывает как надо.
В тред призываются гуру perl internals. :-)
===========================================
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Devel::Size;
TestGreedy::init();
for (1..2) {
{
no strict;
my $name = 'TestGreedy::SPAM';
for my $type (qw(SCALAR ARRAY REF HASH)){
print STDERR "$type\n";
my $ref = *{$name}{$type};
print STDERR "$ref\n";
next unless $ref;
print Devel::Size::total_size( $ref ), "\n";
}
}
}
exit;
package TestGreedy;
use vars qw(
$SPAM
);
sub init {
my $f = "x" x 1024 x 1024 ;
foreach my $i (1 .. 50 ) {
$SPAM->{$i} = $i . $f;
}
}
===========================================
--
2009/7/29 Ruslan Zakirov <ruslan.zakirov на gmail.com>:
> Там где-то было написано про кеширование.
>
> 2009/7/29 Alex Shatlovsky <shatlovsky на gmail.com>:
>> Привет,
>>
>> 2009/7/29 Ruslan Zakirov <ruslan.zakirov на gmail.com>:
>>> Вот так где-то. Патч к B::TerseSize и скрипт посмотреть на результат.
>>> Осталось в Apache::Status все это вывести красиво.
>>
>> Спасибо!
>> Сходу не завелось, при первом запуске под мод_перл размер показывает
>> правильно, при последующих Devel::Size::total_size() и
>> Devel::Size::size() возвращают 0.
>>
>> Но направление понял, буду разбираться.
>> Еще раз спасибо.
>>
>> --
>> С уважением,
>> А.Н.Шатловский
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>>
>
>
>
> --
> Best regards, Ruslan.
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
--
С уважением,
А.Н.Шатловский
Подробная информация о списке рассылки Moscow-pm