Использование памяти скриптом Perl - PullRequest
1 голос
/ 30 марта 2012

У меня есть Perl-скрипт, извлекающий URL-адрес, похожий на http://1.1.1.1/1.jpg, из MySQL с использованием DBI, и скачиваю этот jpg-файл, используя LWP :: Simple.Это бесконечный цикл.

while (1) {
    my $url=&fetch_url_from_mysql;
    if ($url){        
        &download_jpg($url);
    } else {
        sleep 1;
    }
}

Простой простой.Я предполагаю, что использование памяти останется в определенном количестве.Но после одного месяца непрерывного запуска этого скрипта.Использование памяти составляет 7,5 ГБ!

Как мне ее профилировать?

1 Ответ

1 голос
/ 30 марта 2012

Для профилирования установите выход explitict. Создайте счетчик и выйдите из своей программы, если ваша итерация равна или больше этой.

Для профилирования используйте NYTprof:

perl -d: NYTProf script.pl nytprofhtml

Но вы имеете дело с утечкой памяти здесь.

Прочтите это, чтобы найти утечку памяти: Как я могу найти утечки памяти в долго выполняющейся программе Perl?

Скорее всего, у вас есть переменная, которая никогда не будет освобождена. Perl освобождает память, если переменная выходит из области видимости, но одна из ваших переменных никогда не выходит из области видимости.

Используйте $ variable = undef, чтобы освободить память.

Если вы перенесете весь свой скрипт, возможно, мы сможем найти в нем утечку.

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...