У нас проблема с отдельными процессами Apache, использующими большие объемы памяти в зависимости от запроса и никогда не возвращающими ее в основную систему. Поскольку эти запросы могут происходить в любое время, со временем веб-сервер помещается в своп, что делает его безразличным даже к SSH. Хуже того, после того как запрос завершен, Python не может освободить память обратно, что приводит к тому, что процессы Apache размером 500 Мб - 1 Гб лежат без дела.
Мы выполняем очень мало запросов в секунду, но каждый запрос может быть очень тяжелым.
То, что я хотел бы сделать, - это иметь способ убить отдельного дочернего процесса apache после того, как он завершит обработку запроса, если его резидентная память превышает определенный порог. Я попробовал несколько способов сделать это внутри mod_python, но похоже, что любая форма выхода из системы приводит к тому, что ответ не завершается для клиента.
Помимо грациозности всех процессов (которых мы действительно хотим избежать) всякий раз, когда это происходит, есть ли способ сказать Apache произвольно завершить процесс после того, как он завершит обработку запроса? Все идеи приветствуются.
В качестве дополнительного предупреждения из-за устаревшей природы системы мы не можем перейти на более позднюю версию Python, поэтому мы не можем использовать улучшенную производительность памяти, равную 2,5. Точно так же мы застряли с нашей текущей ОС.
Версии:
Система: Red Hat Enterprise 4
Apache: 2.0.55
Python: 2.3.5