Уомбл ответ «s является удивительным, хотя и немного трудно понять и применить для неопытный. Я хотел бы привести некоторые эмпирические цифры и сравнение приложения «простой контент» и «электронная коммерция».
Существует не так много материала о настройке различных вариантов использования в зависимости от их соответствующей конфигурации mod_wsgi, поэтому я надеюсь, что здесь можно использовать небольшую прозу.
A) Сайты и микросайты CMS
Мы работаем с несколькими веб-сайтами клиентов, большинство из которых в основном являются контент-сайтами или микро-сайтами, на которых размещается CMS django, некоторые пользовательские формы, а иногда и Celery для запланированных фоновых задач. Эти сайты не жаждут ресурсов, некоторые из них успешно работают параллельно на одном 4-ядерном Intel Xeon с 32 ГБ оперативной памяти. Вот конфигурация, которую мы используем для каждого из сайтов такого типа:
WSGIDaemonProcess example.com user=www-data processes=2 maximum-requests=100
Я говорю о примерно 40 сайтах на одном сервере, большинство из которых со своим промежуточным сайтом работают в режиме ожидания. С двумя процессами (по умолчанию с 15 потоками каждый) сайты обеспечены, хотя и ограничены в своих возможностях распределения ресурсов сервера. Почему эта настройка достаточна, может быть объяснено простой природой приложения (CMS): ни один запрос никогда не займет больше пары миллисекунд. Apache всегда будет оставаться расслабленным, как и нагрузка на процессор.
Б) Сайты электронной коммерции
Более сложные сайты, которые мы делаем, характеризуются все еще вычислительно недорогими локальными операциями, но внешними зависимостями (например, веб-сервисами, предоставляющими данные бронирования), которые дороги с точки зрения времени транзакции. Операции с внешними запросами занимают потоки гораздо дольше, поэтому вам нужно больше потоков для обслуживания того же числа пользователей (по сравнению с простым сайтом CMS сверху). Хуже того, потоки иногда блокируются, когда внешняя служба не может ответить на запрос немедленно, иногда в течение нескольких секунд. Это может привести к неприятному побочному эффекту, когда потоки, помещающие запросы в одну и ту же службу, встают в очередь, пока все доступные потоки mod_wsgi не будут израсходованы и не заблокированы в ожидании.
Для этих сценариев мы пытались использовать 6
процессы, не видя большой разницы, и в итоге мы 12
увидели несравненный прирост производительности и стабильности работы:
WSGIDaemonProcess example.com user=www-data processes=12 maximum-requests=100
Некоторые простые нагрузочные тесты с 150 и 250 параллельными пользователями легко обрабатываются сайтом, который остается хорошо реагирующим (в то время как с 2
процессами сайт непригоден для обслуживания 50 пользователей параллельно). Двухпроцессорный 6-ядерный Intel Xeon с 32 ГБ ОЗУ работает под нагрузкой ЦП ниже 25% при этой нагрузке, при этом использование ОЗУ практически остается постоянным и составляет менее 25%. Обратите внимание, что мы используем выделенный компьютер только для одного сайта, поэтому мы не будем воровать ресурсы, которые могут понадобиться другим сайтам.
Вывод
Использование большего числа процессов - это компромисс между разрешением Apache использовать доступные системные ресурсы или нет. Если вы хотите сохранить стабильную серверную систему (не веб-сайт!) В условиях «атаки», оставьте это число низким. Если вы хотите, чтобы Apache помогал вам использовать системные ресурсы (ЦП, ОЗУ) при необходимости, выберите большее число. То, как высоко вы можете подняться, рассчитывается примерно так, как описано в принятом ответе выше, и в конечном итоге ограничено доступной мощностью процессора и оперативной памяти.
(PS: Я держу раздел ConfigurationDirectives вики проекта modwsgi под своей подушкой для Apache-подобного фонового чтения. Также не забудьте понять и контролировать открытые соединения вашего сервера Apache .)