2012-01-09 5 views
9

Hergo에 배치 된 Django 앱을 가지고 있으며, 작업 프로세스가 셀러리 (+ 모니터링을위한 셀러리 카메라)를 실행합니다. RedisToGo의 Redis 데이터베이스를 중개인으로 사용하고 있습니다. 나는 Redis가 기억을 잃어 버리는 것을 계속 알아 차렸다.Celery와 Redis는 메모리가 부족한 상태로 유지됩니다.

  1. "_kombu.binding.celeryd.pidbox"
  2. "celeryev.643a99be : 여기
    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 
    

    키 '*'의 출력입니다 :

    이처럼 내 procfile는 모습입니다 -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. 이외에도 _kombu.bindings.celeryev가 설정됩니다. 셀레 리브. 나는 - 살아있어. 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. 명령이 실행 됨)에서 키가 제거됩니다.

O (N)이기 때문에 keys 명령을 사용할 수 없습니다. 여기서 N은 DB의 총 키 수입니다. 재발행시 TTL은 까다로울 수 있습니다 < 2.1.

만료 celeryev. del celeryev 대신에. 임시 오프라인 celeryev 소비자가 재생할 수 있도록하기 위해 사용할 수 있지만, 그게 가치가 있는지 모르겠습니다.

author

+0

링크, 아래 당신이 링크를 게시하지 않는 이유, 당신이 솔루션을 게시 이잖아. –