Назад | Перейти на главную страницу

Как указать uWSGI предпочесть процессы потокам для балансировки нагрузки

Я установил Nginx + uWSGI + Django на VDS с 3 ядрами ЦП. uWSGI настроен на 6 процессов и 5 потоков на процесс. Теперь я хочу скажите uWSGI использовать процессы для балансировки нагрузки, пока все процессы не будут заняты, а затем при необходимости использовать потоки. Кажется, что uWSG я предпочитаю потоки, и я не нашел ни одной опции конфигурации, чтобы изменить это поведение. Первый процесс занимает 100% процессорного времени, второй - около 20%, а другие процессы в основном не используются.

Наш сайт получает 40 р / с. На самом деле даже трех процессов без потоков обычно достаточно для обработки всех запросов. Но обработка запросов время от времени зависает по разным причинам, например, заблокированные общие ресурсы и т. Д. В таких случаях у нас есть -1 процесс. Пользователи не любят ждать и снова и снова переходить по ссылке. В результате все процессы зависают и всем пользователям приходится ждать.

Я бы добавил еще больше потоков, чтобы сделать сервер более надежным. Но проблема, вероятно, в python GIL. Потоки не используют все ядра процессора. Таким образом, несколько процессов работают намного лучше для балансировки нагрузки. Но потоки могут очень помочь в случае заблокированных общих ресурсов и задержек ожидания ввода-вывода. Процесс может выполнять большую работу, пока один из его потоков заблокирован.

Я не хочу сокращать сроки до тех пор, пока не будет другого решения. Теоретически эту проблему можно решить с помощью потоков, и я не хочу показывать пользователю сообщения об ошибках или заставлять его ждать при каждом запросе, пока не останется другого выбора.