在Heroku和Redistogo Nano上达到最大客户数量 [英] Maximum clients reached on Heroku and Redistogo Nano

查看:180
本文介绍了在Heroku和Redistogo Nano上达到最大客户数量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在RedokuToGo Nano插件上使用Heroku上的celerybeat



有一个web dyno和一个工人dyno

<



问题是:每当我部署一个新的提交时,dynos重新启动,并且我得到这个错误

p>

  2014-02-27T13:19:31.552352 + 00:00 app [worker.1]:Traceback(最近一次调用最后一次): 
2014-02-27T13:19:31.552352 + 00:00 app [worker.1]:File/app/.heroku/python/lib/python2.7/site-packages/celery/worker/consumer。 py,第389行,开头
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]:文件/app/.heroku/python/lib/python2.7/site-packages/celery/worker/consumer.py,第727行,在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 ]:文件/app/.heroku/python/lib /python2.7/site-packages/celery/worker/consumer.py,第792行,在_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]:在on_connect
文件/app/.heroku/python/lib/python2.7/site-packages/redis/connection.py,第263行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] :文件/app/.heroku/python/lib/python2.7/site-packages/redis/connection.py,第314行,在read_response
2014-02-27T13:18:23.864287 + 00:00应用程序[worker.1]:提出响应
2014-02-27T13:18:23.864287 + 00:00应用程序[worker.1]:ResponseError:达到客户端的最大数量
2014-02-27T13: 19:31.552352 + 00:00 app [worker.1]:文件/app/.heroku/python/lib/python2.7/site-packages/kombu/connection.py,行272,位于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 ]:文件/app/.heroku/python/lib/python2.7/site-packages/kombu/utils/__init__.py,第218行,在retry_over_time
2014-02-27T13:19:31.552591+ 00:00 app [worker.1]:返回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,第162行,连接
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,第617行,连接
2014-02-27T13:18:23.870811 + 00:00 app [worker.1]:[2014-02-27 13:18:23,870:ERROR / MainProcess]消费者:连接到经纪人丢失。试图重新建立连接...

这些日志不停地继续。直到我停止了两个dynos并重新启动它们。

它已成为一个问题,因为几乎每次部署新提交时都会发生这种情况。



任何想法为什么发生这种情况以及如何解决这个问题? p> nano redistogo计划在 10 上限制并发redis连接。



使用的redis连接数会根据您的前端和芹菜工人设置。这听起来像是你的生产堆栈使用> = 5 redis connections



当您部署新代码时,Heroku会创建一个全新的叠加。这意味着您在部署时使用> = 10个redis连接



有两种方法可以解决这个问题:




  • 通过升级到更大的计划($$$),增加允许的最大redistogo连接数量

  • 减少您的堆栈使用的连接数(减少您的web worker使用的芹菜并发或redis连接)


这是一个简单的问题:资源枯竭。我只需支付更大的RedisToGo计划。


I am using celerybeat on Heroku with RedisToGo Nano addon

There is one web dyno and one worker dyno

The celerybeat worker is set to perform a task every minute.

The problem is: Whenever I deploy a new commit, dynos restart, and I get this error

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...

and those logs go on endlessly. till I stop both dynos and restart them.

It has become a problem because it happens almost every time a new commit is deployed.

Any ideas why this is happening and how to solve this?

解决方案

The nano redistogo plan caps concurrent redis connections at 10.

The number of redis connects used will vary based on your front-end and celery worker settings. It sounds like you are using >= 5 redis connections for your production stack.

When you deploy new code, Heroku spins up an entirely new stack. This means you are using >= 10 redis connections at the time of deploy.

There are two ways to fix this:

  • Increase the maximum number of redistogo connections allowed, by upgrading to a larger plan ($$$)
  • Decrease the number of used connections for your stack (decrease celery concurrency or redis connections used by your web worker)

This is a simple matter of resource exhaustion. I would just pay for a larger RedisToGo plan.

这篇关于在Heroku和Redistogo Nano上达到最大客户数量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆