2013-12-22 2 views
2
  • У нас есть установка с большим количеством отдельных установок django на одной коробке. каждая из них имеет свою собственную базу кода & пользователя linux.
  • Мы используем сельдерей для некоторых асинхронных задач.
  • Каждая установка имеет свою собственную установку для сельдерея, то есть собственный сельдерей & рабочий.
  • Количество асинхронных задач на установку ограничено, а не критическое время.
  • Когда работник начинает работу, он занимает около 30 мб памяти. когда он продлится некоторое время, эта сумма может расти (предположительно из-за фрагментации).

Последняя точка пули уже была (несколько) решена настройками --maxtasksperchild до низкого числа (скажем, 10). Это обеспечивает перезапуск после 10 задач, после чего память по крайней мере возвращается к 30 МБ.Сельдерей: ограничение использования памяти (большое количество установок джанго)

Однако каждый сельдерей все еще занимает много памяти, так как минимальное количество рабочих кажется равным 1, а не 0. Я также думаю, что работа python manage.py celery worker не приводит к минимально возможной площади для сельдерея, поскольку полный стек загружается, даже если происходит только проверка задач.

В идеальной конфигурации я хотел бы видеть следующее: процесс с очень небольшим объемом памяти (100 тыс. Или около того) рассматривает очередь для новых задач. когда возникает такая задача, она запускает (тяжелый) полный стек django в отдельном процессе. и когда работник завершен, тяжелый процесс развернут.

Возможно ли такое конфигурирование, используя (несколько) стандартный сельдерей? Если нет, то какие точки расширения существуют?

Мы (в настоящее время) используем сельдерей 3.0.17 и связанный с ним джанго-сельдерей.

ответ

0

Просто убедитесь, что я понимаю - у вас много разных кодов джанго, каждый со своим сельдереем, и они занимают слишком много памяти при одновременном запуске на одном ящике, все ждут, чтобы работа сельдерея спустилась труба? Сколько экземпляров сельдерея мы говорим здесь?

По моему опыту, вы используете сельдерей django совсем по-другому, чем это было разработано для всех ваших проектов django, которые должны быть сведены к нескольким (или одному) проекту (проектам), состоящим из нескольких Приложения. Затем вы настраиваете небольшое количество очередей на задания сельдерея из разных приложений. Таким образом, у вас есть только столько бездействующих селевых нитей, занимающих 30 мб, как у вас есть очереди, а одна очередь может обрабатывать несколько задач (из нескольких приложений, если вы хотите). Проблема с памятью должна исчезнуть.

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

Зачем вам так много установок django? Пожалуйста, дайте мне знать, если мне что-то не хватает, или если вам нужно разъяснение.

+0

Ca. 50 установок в коробке. Различные установки Django Celery соответствуют различным установкам django. Мой сценарий не слишком отличается от «общего хостинга» (хотя я разделяю с собой). То есть различные проекты Django соответствуют различным сайтам (приложениям), которые различны. –

+0

, тогда я думаю, что вам нужно перестроить так, чтобы задания на сельдерей были отделены от установок django - возможно, у вас есть один проект «admin» django, который управляет работой сельдерея, так что вам нужно всего лишь несколько рабочих одновременно. –

Смежные вопросы