[Moscow.pm] mod_perl и утечки памяти

Ruslan Zakirov ruslan.zakirov на gmail.com
Ср Июл 29 01:40:06 PDT 2009


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 освободить память. Как бы хотели,
чтобы перл вле себя?

-- 
Best regards, Ruslan.


Подробная информация о списке рассылки Moscow-pm