Perl и управление процессами - PullRequest
4 голосов
/ 27 ноября 2011

Я работаю над довольно крупным корпоративным приложением, использующим Perl, с десятками модулей и т. Д., Которые в основном используются для сканирования некоторых вещей в Интернете.

Одна из подпрограмм, которые я написал, выполняет поиск и анализ изображений. Обычно на выполнение каждого параметра, который я отправляю, уходит пара секунд. Так что я отправляю это другому процессу (разветвление ...). Проблема в том, что через некоторое время система становится очень нестабильной, память заполняется.

Вопросы

  1. Это потому, что каждый созданный процесс создает копию родительских данных в отдельной ячейке памяти? если так, значит ли это, что у каждого ребенка есть копия ВСЕХ модулей? (а их десятки ...)
  2. Как лучше всего освободить эту память / управлять этими процессами?

1 Ответ

6 голосов
/ 27 ноября 2011

Форкинг использует копирование при записи , поэтому разветвленные процессы не должны занимать слишком много памяти, если они не являются особенно долгоживущими.

Похоже, у вас утечка памяти в вашей системе. Есть ли у вас взаимно-рекурсивные зависимости или круговые структуры данных? Если это так, вы можете захотеть использовать Scalar :: Util :: weaken для настройки количества ссылок в ваших структурах данных.

...