В чем причина уничтожения старых потоков / процессов сервера и запуска новых после обслуживания определенного количества запросов?
Например, apache httpd предоставляет директиву MaxConnectionsPerChild, которая контролирует, как часто сервер перезапускает процессы, убивая старые и запуская новые.
В чем причина уничтожения старых потоков вообще после обслуживания определенного количества соединений.
Разве горячий кеш здесь не применим?
1 ответ
Из документов:
Установка ненулевого значения для MaxConnectionsPerChild ограничивает объем памяти, который процесс может потреблять из-за (случайной) утечки памяти.
Так что если у вас течет 1 МБ на запрос (malloc()
но нет free()
), вы будете постепенно использовать все больше и больше памяти, пока не закончится и Apache не будет убит. Но если вы установите MaxConnectionsPerChild 100
ребенок будет постепенно использовать до 100 МБ памяти, затем погибнет и вернется к нулю.
Здесь применимо "горячее кэширование", настройка MaxConnectionsPerChild замедлит работу Apache. Вот почему значение по умолчанию бесконечно. MaxConnectionsPerChild - это не элегантная клейкая лента при утечках памяти. Программист, испытывающий нехватку времени, может предпочесть потратить 1 минуту на установку MaxConnectionsPerChild, а не 1 неделю на вызовы malloc().