我现在正在 3 台 ec2 机器上测试我的 celery 实现。我现在对我的实施非常有信心,但我在实际的工作执行中遇到了问题。我的测试结构如下:
- 1台ec2机器被指定为broker,还运行一个celeryworker
- 1 台 ec2 机器被指定为客户端(运行客户端 celery 脚本,该脚本使用 .delay() 将所有任务排入队列,还运行 celery 工作线程
- 1台ec2机器纯粹是一个worker。
所有机器都有 1 名芹菜工人在运行。之前,我立即收到消息:
“与 celery@[其他 ec2 ip] 的巨大偏差可能意味着时钟不同步。”
然后将打印以秒为单位的漂移量,该漂移量会随着时间的推移而增加。
我还会收到消息:“错过了来自 celery@[其他 ec2 ip] 的心跳。
此时机器将执行很少的工作,因此我在 ec2 中的 AutoScaling 配置会在实例的 CPU 利用率达到非常低的水平 (
因此,为了尝试解决这个问题,我尝试使用此命令同步所有机器的时钟(尽管我认为 celery 处理了这个问题),该命令是在所有机器启动时执行的:
apt-get -qy install ntp
service ntp start
这样,它们在大约 10 分钟内都表现良好,没有出现任何故障,之后我开始出现心跳丢失,我的 ec2 实例停止运行并关闭。奇怪的是,漂移有时会增加然后又减少。
知道为什么会发生这种情况吗?
我正在使用最新版本的celery(3.1)和rabbitmq
编辑:应该注意的是,我正在 ec2 上使用 us-west-1a 和 us-west-1c 可用区。
EDIT2:我开始认为内存问题可能是一个问题。我正在使用 t2.micro 实例,并在同一台机器上运行 3 个 celery 工作程序(仅 1 个实例),这也是代理,仍然会导致心跳丢失和停止。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)