Сельдерей, использующий только 20% ЦП (в пике) - PullRequest
1 голос
/ 18 октября 2019

Я запускаю приложение «сельдерей + кролик». Я запускаю кучу машин ec2, но обнаружил, что мои машины из сельдерея используют только около 15% процессорного времени (пик 20%). Я настроил 2 сельдерея на машину.

Разве работники сельдерея не должны быть близки к использованию 100% загрузки ЦП?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Я не использую опцию сельдерея --concurrency или eventlet, хотя я использую несколько рабочих. По умолчанию параллелизм установлен на 8. Мои задачи выполняются в php в основном с блокировкой ввода-вывода, поэтому проблем не будет, если у нас будет параллельно запущено больше процессов. Есть ли способ настроить сельдерей для запуска большего количества задач в зависимости от загрузки процессора

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Разве работники сельдерея не должны быть близки к использованию 100% загрузки ЦП?

Только если вы загрузите их для загрузки 100% ЦП :)

Мои задачи выполняются в php, в основном блокировка io

Если ваши задачи в основном выполняют IO-вызовы, то это, скорее всего, причина, по которой процессор не загружен. Т.е. когда процесс / theads в основном бездействуют после выполнения вызова io и ожидания его завершения.

Крайне важно провести тестирование вашей конфигурации. На практике это может выглядеть следующим образом:

  • выбор начального уровня для параллелизма (то есть по умолчанию)
  • Тест производительности / использование ресурсов
  • Увеличение уровня параллелизма
  • Тест производительности / использование ресурсов
  • Продолжайте до тех пор, пока увеличение параллелизма больше не даст никакой выгоды

Если ваши рабочие задачи связаны с вводом-выводом, это идеальный случай для eventlet. Так как это позволит вам запускать множество задач, связанных с вводом-выводом, на одном процессоре. Т.е. рассмотрим случай, когда ваша машина имеет 64 ядра. Вы легко сможете выполнить несколько таких задач для задач, связанных с вводом-выводом, но в какой-то момент большинство ресурсов пойдут на учет процессов, накладные расходы и переключение контекста.

С помощью eventlet один процессор может обрабатывать сотни или тысячииз числа работающих одновременно:

Пул предварительной обработки может использовать несколько процессов, но их количество часто ограничивается несколькими процессами на процессор. С помощью Eventlet вы можете эффективно создавать сотни или тысячи зеленых нитей. В неофициальном тесте с системой центра подачи пул Eventlet мог извлекать и обрабатывать сотни каналов каждую секунду, в то время как пул prefork потратил 14 секунд на обработку 100 каналов. Обратите внимание, что это одно из приложений, в которых особенно хорош асинхронный ввод-вывод (асинхронные HTTP-запросы). Вам может потребоваться сочетание как работников Eventlet, так и работников prefork, а также маршрутизация задач в соответствии с совместимостью или с тем, что лучше всего работает.

0 голосов
/ 18 октября 2019

У вас есть два варианта - увеличить уровень параллелизма (используя --concurrency) или использовать (не рекомендуется) параметр автоматического масштабирования . В большинстве случаев мы используем избыточную нагрузку на AWS, используя номер параметра параллелизма, равный 2 * N, где N - количество виртуальных ЦП для выбранного вами типа экземпляра. Мы не используем чрезмерно узлы, которые подписаны на специальную очередь, куда мы отправляем наши задачи, связанные с процессором.

...