2010-03-06 5 views
1

У моей учетной записи VPS время от времени заканчивается память. Он использует Apache для Linux. Поддержка говорит, что это медленная утечка памяти и позволила MaxRequestsPerChild справиться с этим.Утечки памяти и Apache

У меня есть несколько вопросов об этом. Когда дочерний процесс умирает, это приведет к тому, что мои скрипты потеряют данные сеанса? У кого-нибудь есть советы о том, как я могу отслеживать утечку памяти?

Благодаря

ответ

0

Нет, когда процесс умирает ребенок, вы не потеряете какие-либо данные, если это не было в середине запроса в то время (которое не должно произойти, если он выходит из-MaxRequestsPerChild).

Вам следует попытаться воспроизвести утечку памяти с использованием идентичного программного стека в вашей тестовой системе. Вы можете использовать такие инструменты, как Valgrind, чтобы попытаться обнаружить это.

Вы также можете попробовать отладочную сборку своего веб-сервера и его модулей, что позволит вам определить, что происходит.

Трудно воспроизвести поведение производственных систем в непроизводственных. Если у вас есть автотестирование вашего веб-приложения, вы можете попробовать использовать полный комплект автотестов, но на практике это вряд ли покрывает каждый путь кода, поэтому может пропустить утечку.

0

Когда дочерний процесс умирает, это приведет к тому, что мои скрипты потеряют данные сеанса?

Не зная, какой язык сценариев и обработчик сессии вы используете (и фактический код), это довольно сложно сказать.

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

OTOH, если ваша прикладная логика реализована через демона (например, контейнер Java), то вполне вероятно, что утечки памяти могут накапливаться (хотя они будут сообщаться против другого процесса).

Обратите внимание, что если проблема устранена установкой MaxRequestsPerChild, это означает, что проблема возникает в модуле Apache.

Производственные версии самого Apache, по моему опыту, очень стабильны без утечек памяти. Однако я не использовал все модули. Не уверен, что ExtendedStatus дает возможность использовать память по модулю - возможно, стоит проверить.

Я ранее видел проблемы с управлением памятью модулей, загружаемых модулем PHP, не соблюдая ограничения на память PHP, однако они все-таки прояснили в конце запроса.

C.

Смежные вопросы