mod_perl - утечка памяти.

Igor Sysoev is at rambler-co.ru
Fri Aug 17 11:41:09 MSD 2007


On Fri, Aug 17, 2007 at 01:16:07AM +0400, Аркадий Кулев wrote:

> Создал отдельную конфигурацию для nginx только для использования встроенного перла.
> Создал несколько .pm модулей и запрашиваю их по мере необходимости.
> 
> Каждый модуль использует "use strict;".
> 
> Модули довольно нагруженные, у каждого примерно такой набор заголовков - 
> use strict;
> use nginx;
> use File::stat;
> use WWW::Curl::Easy;
> use DBI;
> use Image::Size;
> use GD::Image;
> use Image::Epeg;
> use HTTP::Request::Common;
> use LWP::UserAgent;
> 
> как видите - используется для редактирования изображений и файловых операций типа принять отправить по HTTP.

DBI, Curl, Request - это будет блокировать рабочие процессы на время ожидания
ответа.

> Стал замечать, что процессы nginx постепенно поглощают всю свободную память и через 30-60 минут уходят в свап.
> 
> $r->variable не использую, все переменные задекларированы через my.
> 
> приходится каждые полчаса отправлять в nginx сигнал SIGHUP дабы перезапускался.
> наверное было бы здорово добавить в настройки воркеров такую функцию как максимальное количество соединений, после которого наступает перезагрузка воркера, на случай утечки.

Вообще правильнее завершать обработку после выхода на определённый размер
виртуальной памяти, а getrusage() такого параметра не даёт. Использовать
RSS не всегда даст нужный результат, так как процесс может постепенно
уходить в своп и иметь небольшой RSS, постоянно дёргая диск.

> а так - конечно хотелось бы чтобы ее вообще не было.

Это к авторам перла. Можно попробовать пересобрать перл с -Dusemymalloc=no


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list