Скукота, потому что в этом посте вы не найдёте для себя ничего полезного, если вам не интересно:
1) почему apache + mod_python могут
вые#ать вам моск отожрать вашу память
2) что делать, чтобы этого не произошло
3) и что делать, чтобы этого избежать ваащще
Итак, читал я тут статью о
пиках нагрузки и неумеренном потреблении памяти при работе mod_python. Не то, чтобы я этим живо интересуюсь, просто стало интересно. Захотелось сделать небольшой конспект.
Так вот кратко ответы на вышепоставленные вопросы:
1) потому что апач по дефолту настроен работать с prefork Multi-processing Module (MPM), что означает, что апач будет рожать по чилду на каждый запрос. Без тредов. А поскольку mod_python работает так, что НЕ шарит все python extensions между чилдами, а в каждом чилде этот набор свой, то каждый чайлд занимает размер всего работающего приложения. А по-умолчанию в конфиге максимальное число чилдов может быть достаточно большим, что при сравнительно активной работе с приложением приводит к расходу большого количества памяти. Ну очень большого. Это всё усугубляется настройками Keep Alive
2) Чтобы этого не произошло желательно:
а) не хостить питон с php, тогда можно будет использовать worker MPM, что даст multi threading;
b) вынести статический контент в управление отдельному вебсерверу (желательно nginx, lighttpd);
c) для статики Keep Alive - хорошо, для динамики - не так хорошо, поэтому после выноса статики спод Апача надо ему Keep Alive выкрутить на минимум;
d) выставить начальное (при старте апача) количество чилдов в значение близкое к средней нагрузке (лучше чуть меньше).
Те же рекомендации применимы к mod_wsgi. И ваапще виной всему Python, а не mod_python
3) просто процитирую последнее предложение из статьи: "The final answer? Stop using mod_python, use mod_wsgi and run it with daemon mode instead. You will save yourself a lot of headaches by doing so"
Конспект не претендует на инструкцию к применению. Так же интересны мнения тех, кто имел с описанным дело на практике