Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Oleg Ivanenko                        2:5020/400     10 Apr 2003  15:22:33
 To : Victor Wagner
 Subject : Re: mod_perl: parallel requests
 -------------------------------------------------------------------------------- 
 
 Victor Wagner пишет:
 
 > Oleg Ivanenko <ash@aska.com.ua> wrote:
 > 
 > OI> 1. Кто как ловит memory leaks при использовании mod_perl (про 
 > OI> Apache::Leak я знаю, но в моем случае его тяжеловато использовать, да и 
 > OI> реакция программы какая-то непредсказуемая на leak_test)?
 > 
 > Поставить апачу лимит на virtual address space (или memory size, если
 > оно работает). После этого смотришь в логи - если на каком-то запросе
 > апач регулярно пришибают, значит там с памятью не все кругло.
 > 
 > Вообще, достаточно часто замести проблему с memory leaks под ковер,
 > посредством выставления достаточно маленького MaxRequestPerChild в
 > апаче.
 > 
 > Там память расходуется не только в случае явных глюков в перловом коде.
 > Есть во-первых, некоторые проблемы с динамическими библиотеками при
 > graceful restart-е, во-вторых, плохое взаимодействие с системным Copy on
 > Write.
 
 То есть, другими словами, даже если моя программа не делает ликов, их
 может делать еще что-то (mod_perl, apache etc) и поэтому лучше от греха
 подальше время от времени прибивать экземпляры mod_perl выполняющего мой
 код? Hе шаманство ли это?
 
 > OI> 3. Если программа аварийно завершается, то при этом в mod_perlовой 
 > OI> заглушке для этой программы, не происходит автоматическая очистка памяти 
 > 
 > Я совсем запутался в твоей терминлогии. Что такое программа? Судя по
 > всему - явно не хреновина, выполнение которой порождает отдельный
 > процесс. За отдельным процессом память чистит операционная система, и
 > чистит хорошо. Что такое модперловая заглушка?
 
 Возможно я некорректно выразился. Под словом "программа" я понимаю
 выполняемый операционной системой код написанный программистом.
 
 Hе считаю этот вопрос для себя принципиальным.
 
 Под словом "заглушка" я понимал сгенерированный mod_perl код для
 выполнения внутри себя моей программы. По английски это можно назвать
 stub. Так вот, представь себе ситуацию, что до аварийного завершения
 моей программы внутри пресловутой "заглушки" я имею в памяти 20 объектов
 некоего класса. После того, как программа аварийно завершилась, эти 
 объекты остаются в памяти "заглушки", вследствие, циклических ссылок, 
 которые ты приводишь в пример ниже по тексту и уничтожаются только
 "during global destruction", при завершении работы apache. Могу
 предоставить логи, если интересно.
 
 > 
 > Вообще в перле есть garbage collector, и он работает. Есть, конечно,
 > ситуации, с которыми он не справляется. Hапример
 > 
 > sub leak {
 > my $a={t=>"a long string"};
 > my $b={t=>"another long string"};
 > 
 > $a{'b'}=$b;
 > $b{'a'}=$a;
 > }
 > 
 > Hо их можно аккуратно избегать. А так объектный стиль программирования и
 > аккуратно написанные деструкторы позволяют убирать за собой не только
 > память, но и файловые дескрипторы, коннекты к БД, временные файлы и
 > многое другое, независимо от того каким образом прекратил существование 
 > объект, то ли посредством присваивания переменной, содержащей последнюю
 > ссылку на него, чего-то другого, то-ли просто выходом этой переменной за
 > пределы scope.
 
 Я знаю, о преимуществах ООП и поэтому в perl все пишу КЛАССАМИ. Я
 убедился на собственном опыте в опасностях, которые подстерегают
 поклонников глобальных переменных.
 Еще раз повторюсь -- в случае циклических ссылок деструкторы автоматом
 HЕ РАБОТАЮТ, сначала нужно избавиться от ссылок.
 -- 
 Truly yours, Oleg Ivanenko aka Ash
 oai-ash@yandex.ru
 [Все это было бы смешно, когда бы не было так грустно][Delphi][Guitar]
 ICQ[119082031]
 http://www.ash.hut.ru
 
 --- ifmail v.2.15dev4
  * Origin: ASKA (2:5020/400)
 
 

Вернуться к списку тем, сортированных по:

 Тема:    Автор:    Дата:  
 Re: mod_perl: parallel requests   Oleg Ivanenko   10 Apr 2003 15:22:33 
Архивное /ru.cgi.perl/8449fedccbef.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional