В чем причина уничтожения старых потоков / процессов сервера и запуска новых после обслуживания определенного количества запросов?

Например, apache httpd предоставляет директиву MaxConnectionsPerChild, которая контролирует, как часто сервер перезапускает процессы, убивая старые и запуская новые.

В чем причина уничтожения старых потоков вообще после обслуживания определенного количества соединений.

Разве горячий кеш здесь не применим?

1 ответ

Решение

Из документов:

Установка ненулевого значения для MaxConnectionsPerChild ограничивает объем памяти, который процесс может потреблять из-за (случайной) утечки памяти.

Так что если у вас течет 1 МБ на запрос (malloc() но нет free()), вы будете постепенно использовать все больше и больше памяти, пока не закончится и Apache не будет убит. Но если вы установите MaxConnectionsPerChild 100ребенок будет постепенно использовать до 100 МБ памяти, затем погибнет и вернется к нулю.

Здесь применимо "горячее кэширование", настройка MaxConnectionsPerChild замедлит работу Apache. Вот почему значение по умолчанию бесконечно. MaxConnectionsPerChild - это не элегантная клейкая лента при утечках памяти. Программист, испытывающий нехватку времени, может предпочесть потратить 1 минуту на установку MaxConnectionsPerChild, а не 1 неделю на вызовы malloc().

Другие вопросы по тегам