2014-02-27 1 views
7

에 도달했다. 나는, 새로운 커밋 배포 동력계 다시 시작할 때마다, 나는이 오류를최대 클라이언트는 내가 RedisToGo 나노 부가</p> <p>하나의 웹 다이노 한 작업자 다이노 celerybeat 노동자가 작업 매 분마다 수행하도록 설정되어</p> <p>이 있습니다와 Heroku가에 celerybeat를 사용하고 Heroku가와 Redistogo 나노

2014-02-27T13:19:31.552352+00:00 app[worker.1]: Traceback (most recent call last): 
2014-02-27T13:19:31.552352+00:00 app[worker.1]: File "/app/.heroku/python/lib/python2.7/site-packages/celery/worker/consumer.py", line 389, in start 
2014-02-27T13:19:31.552352+00:00 app[worker.1]:  self.reset_connection() 
2014-02-27T13:19:31.552352+00:00 app[worker.1]: File "/app/.heroku/python/lib/python2.7/site-packages/celery/worker/consumer.py", line 727, in reset_connection 
2014-02-27T13:19:31.552352+00:00 app[worker.1]:  self.connection = self._open_connection() 
2014-02-27T13:19:31.552352+00:00 app[worker.1]: File "/app/.heroku/python/lib/python2.7/site-packages/celery/worker/consumer.py", line 792, in _open_connection 
2014-02-27T13:19:31.552352+00:00 app[worker.1]:  callback=self.maybe_shutdown) 
2014-02-27T13:18:23.864287+00:00 app[worker.1]:  self.on_connect() 
2014-02-27T13:18:23.864287+00:00 app[worker.1]: File "/app/.heroku/python/lib/python2.7/site-packages/redis/connection.py", line 263, in on_connect 
2014-02-27T13:18:23.864287+00:00 app[worker.1]:  if nativestr(self.read_response()) != 'OK': 
2014-02-27T13:18:23.864287+00:00 app[worker.1]: File "/app/.heroku/python/lib/python2.7/site-packages/redis/connection.py", line 314, in read_response 
2014-02-27T13:18:23.864287+00:00 app[worker.1]:  raise response 
2014-02-27T13:18:23.864287+00:00 app[worker.1]: ResponseError: max number of clients reached 
2014-02-27T13:19:31.552352+00:00 app[worker.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 272, in ensure_connection 
2014-02-27T13:19:31.552352+00:00 app[worker.1]:  interval_start, interval_step, interval_max, callback) 
2014-02-27T13:19:31.552591+00:00 app[worker.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/utils/__init__.py", line 218, in retry_over_time 
2014-02-27T13:19:31.552591+00:00 app[worker.1]:  return fun(*args, **kwargs) 
2014-02-27T13:19:31.552591+00:00 app[worker.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 162, in connect 
2014-02-27T13:19:31.552591+00:00 app[worker.1]:  return self.connection 
2014-02-27T13:19:31.552591+00:00 app[worker.1]: File "/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py", line 617, in connection 
2014-02-27T13:18:23.870811+00:00 app[worker.1]: [2014-02-27 13:18:23,870: ERROR/MainProcess] consumer: Connection to broker lost. Trying to re-establish the connection... 

을 얻고 그 로그는 끝없이 계속 :

문제입니다. 두 dynos를 모두 멈추고 다시 시작할 때까지.

새로운 커밋이 배포 될 때마다 거의 발생하기 때문에 문제가되었습니다.

왜 이런 일이 발생하며이를 해결하는 방법에 대한 아이디어가 있습니까?

답변

9

에 nano redistogo 계획 대문자 동시 연결이 연결됩니다.

사용되는 redis 연결 수는 프런트 엔드 및 셀러리 작업자 설정에 따라 달라집니다. 생산 스택에 대해 이상 = 5 개의 재발행 연결을 사용하고있는 것 같습니다.

새 코드를 배포하면 Heroku가 완전히 새로운 스택을 작성합니다. 즉, 배포시보다 큰 숫자의 = 10을 사용하고 있음을 의미합니다. ($$$)

  • 이 당신의 스택에 사용되는 연결의 수를 감소

    • 더 큰 계획을 업그레이드하여, 허용 redistogo 연결의 최대 수를 늘이 문제를 해결하는 방법은 두 가지가 있습니다

      (웹 작업자가 사용하는 셀러론 동시성 또는 연결 다시 감소)

    이것은 자원 고갈의 간단한 문제입니다. 나는 더 큰 RedisToGo 계획에 대해서만 지불 할 것입니다.

  • +0

    +1 @Winfield가 맞다면, 현재의 인스턴스의 한계에 대해 검사 할 수있는 방법으로 현재'connected_clients'의 수를 얻기 위해'info' 명령을 내릴 수 있습니다. 'info '를 발행하기 위해 사용하는 연결 역시 중요합니다. 나는 문제를 해결하는 데 도움이 필요하면 이메일 redistogo에서 [email protected]으로 이메일을 보냅니다. – mogramer

    +0

    redis/heroku가 배포시 이전 스택의 연결을 닫을 수있는 방법이 있습니까? – Erik

    +1

    문제는 타이밍입니다 - 오래된 것들은 내려 가고있는 동안 새로운 dynos가 올라오고 있습니다. 특히 가동 중단 시간을 줄이기 위해 Preboot를 사용하는 경우. 새 연결이 사용되기 전에 모든 이전 연결과 리소스를 보장하는 유일한 방법은 배포 중에 전체 사이트를 다운시키는 것일뿐입니다. – Winfield

    관련 문제