Нахождение утечки памяти Perl

В первую очередь, я рекомендовал бы Steve Yegge Математика Для Программистов . Это в значительной степени подводит итог Вашей борьбы.

И теперь я хотел бы рассказать персональную историю. Я был двойным майором в Математике и CS. Я изучил много в Математических классах, но я честно не ценил его так же, как я должен иметь. Я скажу Вам, что много вещей, которые я действительно имел, помогло мне в моей карьере программирования. И это не о некоторой формуле или знании исчисления или любого того материала. Это - это, твердый Математический фон учит Вас, как думать для решения проблемы. Мне это - Математика, в которой Вы нуждаетесь.

7
задан HalfBrian 2 November 2009 в 21:27
поделиться

3 ответа

Как узнать, что это утечка памяти? Я могу вспомнить множество других причин, по которым ОС убивает программу.

Первый вопрос, который я задам, - «Всегда ли эта программа правильно работает из командной строки?». Если ответ «Нет», то я сначала исправлю эти проблемы.

С другой стороны, если ответ «Да», я бы исследовал все различия между запуском программы под cron и из командной строки в узнать, почему он плохо себя ведет.

1
ответ дан 7 December 2019 в 07:46
поделиться

Если он запускается cron, разве он не должен умереть после итерации? Если это так, мне трудно представить, насколько серьезной может стать утечка памяти ...

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

1
ответ дан 7 December 2019 в 07:46
поделиться

Вы можете попробовать использовать Devel :: Size для профилирования некоторых ваших объектов. например, в области main :: (сам файл .pl), сделайте что-нибудь вроде этого:

use Devel::Size qw(total_size);

foreach my $varname (qw(varname1 varname2 ))
{
    print "size used for variable $varname: " . total_size($$varname) . "\n";
}

Сравните фактический размер с тем, что вы считаете разумным значением для каждого объекта. Что-то подозрительное может выскочить немедленно (например, кэш, который сильно раздувается, и это не кажется разумным).

Другие вещи, которые стоит попробовать:

  • Удаляйте отдельные части функциональности по одному, чтобы увидеть, не станет ли вдруг все намного лучше; Я бы начал с использования любых внешних библиотек
  • Локализовано ли плохое поведение только на одной конкретной машине или одной конкретной операционной системе? Переместите программу в другие системы, чтобы увидеть, как изменится ее поведение.
  • (При отдельной установке) попробуйте обновить Perl до последней версии (5.10.1), а также обновите все свои модули CPAN
5
ответ дан 7 December 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: