Утечка памяти Perl от оператора совпадения - PullRequest
4 голосов
/ 30 сентября 2011

При исследовании долго работающей Perl-программы на предмет утечек памяти я попытался использовать Test :: LeakTrace .

Глядя на одну из обнаруженных утечек, я могу сузить утечку кода допросто:

/$?/

Работает: perl -MTest::LeakTrace::Script -e'/$?/' печатает:

утечка SCALAR (0x10d3d48) из строки -e 1.

Зачем это нужно?беспокоиться об этом?

Обновление: Также пробовал Devel :: LeakTrace :: Fast , он не жалуется на тот же код.

1 Ответ

2 голосов
/ 11 июня 2012

Если у вас есть утечка. Тогда это:

perl -e'/$?/ for 1..1E9'

должно заставить ваш процесс расти в памяти

 ps -o rss,vsz <PID>

В моем случае он остается стабильным все время. Вы должны проверить это для вашей настройки. Возможно, утечка, обнаруженная вашим модулем, является поздним уничтожением Вы можете написать примечание авторам модуля, чтобы помочь вам выяснить его вывод, вы можете помочь им улучшить его ...

Кстати, еще одна вещь, подтверждающая "отсутствие утечки" для меня, это то, что на

 perl -MTest::LeakTrace::Script -e'/$?/ for 1..1000'

Я не вижу несколько утечек скаляров, только один.

...