Я запускаю приложение django с использованием apache + mod_wsgi, я установил 6 средних серверов ubuntu на Amazon ec2, из которых 2 для mongo и 4 для django и apache, используя ebs для postgresql и настроил балансировщик нагрузки вокруг всех серверов apache, каждый сервер имея 4 ГБ ОЗУ, но при большой нагрузке система замедляется, с помощью команды top я увидел, что apache использует 7 процессов и потребляет около 2,4 ГБ ОЗУ. Ниже приведена конфигурация модуля prefork apache MPM.
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
и это для процесса демона wsgi
WSGIDaemonProcess example user=abc group=abc processes=2 threads=25
затем я изменяю MaxClients на 12, следуя этой статье http://fuscata.com/kb/set-maxclients-apache-prefork, но я получаю ошибку «Время ожидания чтения заголовка запроса» в журнале ошибок apache. Пожалуйста, помогите мне в настройке apache для повышения производительности.
Конфигурация, которую вы используете, действительно зависит от специфики вашего конкретного веб-приложения Python. Без надлежащего мониторинга вам будет очень сложно оптимально настроить конфигурацию Apache и mod_wsgi.
В том, что вы объяснили до сих пор, я вижу различные потенциальные проблемы.
Во-первых, вы планируете использовать режим демона mod_wsgi, но так ли это? Вы не указываете полную конфигурацию, и одна только директива WSGIDaemonProcess не означает, что вы действительно используете режим демона. Если вы не настроили режим демона должным образом, вы очень быстро израсходуете много памяти с этой конфигурацией, так как веб-приложение вполне может работать в дочерних рабочих процессах Apache, а не в процессах режима демона mod_wsgi.
Вторая проблема, если вы не используете режим демона должным образом, заключается в том, что минимальные / максимальные настройки приведут к оттоку процесса. Это приведет к более высокой загрузке ЦП из-за постоянной перезагрузки вашего приложения, поскольку объем трафика увеличивается и уменьшается в короткие сроки.
В-третьих, даже если вы правильно используете режим демона, отключили ли вы запуск Python в дочерних рабочих процессах Apache для экономии памяти и ЦП? Почему вы даже используете предварительный MPM, а не рабочий MPM, что намного лучше, если вы используете режим демона mod_wsgi.
В-четвертых, в зависимости от баланса между задачами, связанными с ЦП и задачами ввода-вывода в вашем веб-приложении, 2 процесса и 25 потоков могут быть довольно плохими. Использование всего 3 процессов с 5 потоками каждый может быть лучше, но, не зная, что делает ваше приложение, действительно трудно сказать, действительно необходим мониторинг.
В любом случае, я мог бы продолжать, поскольку это не все потенциальные проблемы, которые я вижу, но действительно можно гадать, не имея реальных данных о производительности, чтобы оценить, что вам следует делать.
Все, что я могу вам предложить, это прочитать / посмотреть следующее:
Подумайте об установке некоторого мониторинга, и если вы все еще не знаете, что делать, используйте список рассылки mod_wsgi, чтобы получить помощь, как описано в:
Сайты StackOverflow могут быть подходящими для простых ответов, потворствующих толпе TLDR, но они бесполезны для правильного обсуждения такой темы, поскольку нет простого ответа, который можно было бы дать в двух предложениях.
У нас была аналогичная ситуация, хотя и с более простой настройкой, и мы решили проблемы с производительностью, используя большее количество processes
в WSGIDaemonProcess
директива.
Видеть "Сколько процессов я должен указать в WSGIDaemonProcess при запуске Django через mod_wsgi?"для более подробного обсуждения.