[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