Сельдерей и Redis продолжают исчерпывать память - PullRequest
9 голосов
/ 09 января 2012

У меня есть приложение Django, развернутое в Heroku, с рабочим процессом, работающим с сельдереем (+ камера сельдерея для мониторинга).Я использую базу данных RedisToGo Redis в качестве брокера.Я заметил, что у Redis не хватает памяти.

Вот так выглядит мой procfile:

web: python app/manage.py run_gunicorn -b "0.0.0.0:$PORT" -w 3
worker: python lipo/manage.py celerycam & python app/manage.py celeryd -E -B --loglevel=INFO

Вот вывод KEYS '*':

  1. "_ kombu.binding.celeryd.pidbox"
  2. "celeryev.643a99be-74e8-44e1-8c67-fdd9891a5326"
  3. "celeryev.f7a1d511-448b-42ad-9e51-52baee60e977"
  4. "_ kombu.binding.celeryev"
  5. "celeryev.d4bd2c8d-57ea-4058-8597-e48f874698ca"
  6. `_kombu.binding.celery"

celeryev.643a99be-74e8-44e1-8c67-fdd9891a5326 заполняется этими сообщениями:

{"sw_sys": "Linux", "clock": 1, "timestamp": 1325914922.206671, "hostname": "064d9ffe-94a3-4a4e-b0c2-be9a85880c74", "type": "worker-online", "sw_ident": "celeryd", "sw_ver": "2.4.5"}

Есть идеи, что я могу сделать, чтобы периодически удалять эти сообщения?

1 Ответ

1 голос
/ 13 февраля 2012

Это решение?

  1. помимо набора _kombu.bindings.celeryev будет, например, celeryev.i-ам-жив. ключи с установленным TTL (например, 30 с);
  2. процесс celeryev добавляет себя к привязкам и периодически (например, каждые 5 секунд) обновляет celeryev.i-am-alive. ключ для сброса TTL;
  3. перед отправкой события рабочий процесс проверяет не только элементы на _kombu.bindings.celeryev, но и отдельные celeryev.i-am-alive. также ключи, и если ключ не найден (просрочен), то он удаляется из _kombu.bindings.celeryev (и, возможно, выполняются команды del celeryev. или expire celeryev.).

мы не можем просто использовать команду keys, потому что это O (N), где N - общее количество ключей в БД. TTL могут быть хитрыми на Redis <2.1, хотя. </p>

истекает срок сельдереев. вместо дель сельдериев. может использоваться для того, чтобы позволить временному офлайн-потребителю возродиться, но я не знаю, стоит ли это того.

автор

...