[Moscow.pm] mod_perl и утечки памяти
Alex Shatlovsky
shatlovsky на gmail.com
Ср Июл 29 01:49:38 PDT 2009
2009/7/29 Ruslan Zakirov <ruslan.zakirov на gmail.com>:
> 2009/7/29 Alex Shatlovsky <shatlovsky на gmail.com>:
>> Привет,
>>
>> Подскажите, пожалуйста, чем можно посмотреть кто пожрал память под mod_perl?
>> Apache::Status говорит только половину правды: похоже, что ссылочные
>> переменные он учитывает по размеру собственно ссылки (в моем случае 16
>> байт).
>> Тестовый код (см. ниже) честно увеличивает апач на 53 мб, однако
>> Apache::Status видит из них только 3.
>> Собственно вопрос в том, как найти утечку этих "невидимых" мегабайтов?
>
> Пожрал их perl, они не утекли, но назвать это нормальным конечно нельзя.
> Код, который вы написали тоже странный. Комментарии в коде.
>
>
>> Вот тестовый код:
>> ==================================
>> # TestGreedy.pm
>> use strict;
>> use warnings;
>>
>> package TestGreedy;
>>
>> use vars qw(
>> $TIMESTAMP
>> $SPAM
>> );
>>
>> sub init {
>> $TIMESTAMP = scalar( localtime );
>> my $f = "x" x 1024 x 1024 ;
>
> создали строчку, +1М
>
>>
>> foreach my $i (1 .. 50 ) {
>> $SPAM->{$i} = $i . $f;
>
> и создали 50 копий этой строчки, +50М
>
>> }
>> }
>
> После выхода из этого блока $f осталось padlist функции для повторного
> использования, остальные остались в глобальной переменной. Можно
> высвободить 1M написав $f = undef или $f = '' прямо перед выходом.
>
>>
>> init();
>>
>> 1;
>
> Собственно не вижу причин для perl освободить память. Как бы хотели,
> чтобы перл вле себя?
>
Я, видимо, нечетко сформулировал мысль.
То что в $SPAM помещено 50 мегов -- это так и задумывалось для эксперимента.
Хочется понять, какое волшебное заклинание надо сказать
Apache::Status, чтобы он увидел эти самые 50 мб.
--
С уважением,
А.Н.Шатловский
Подробная информация о списке рассылки Moscow-pm