2009/7/29 Ruslan Zakirov <[email protected]>: > 2009/7/29 Alex Shatlovsky <[email protected]>: >> Привет, >> >> Подскажите, пожалуйста, чем можно посмотреть кто пожрал память под 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 mailing list [email protected] | http://moscow.pm.org
