RabbitEC上的EC2消耗吨CPU

| 我正在尝试将Celery和Django的RabbitMQ与EC2实例一起进行一些基本的后台处理。我正在大型EC2实例上运行Rabbitmq-server 2.5.0。 我按照此处的说明(在页面的最底部)下载并安装了测试客户端。我只是放开测试脚本,并获得了预期的输出:
recving rate: 2350 msg/s, min/avg/max latency: 588078478/588352905/588588968 microseconds
recving rate: 1844 msg/s, min/avg/max latency: 588589350/588845737/589195341 microseconds
recving rate: 1562 msg/s, min/avg/max latency: 589182735/589571192/589959071 microseconds
recving rate: 2080 msg/s, min/avg/max latency: 589959557/590284302/590679611 microseconds
问题在于它消耗了大量的CPU:   PID用户PR NI VIRT RES SHR S%CPU%MEM TIME +命令     668 rabbitmq 20 0 618m 506m 2340 S 166 6.8 2:31.53 beam.smp    1301 ubuntu 20 0 2142m 90m 9128 S 17 1.2 0:24.75 java 我之前在微实例上进行测试,它完全消耗了实例上的所有资源。 这是可以预期的吗?难道我做错了什么? 谢谢。 编辑: 这篇文章的真正原因是celerybeat似乎可以运行一段时间,然后突然消耗了系统上的所有资源。我安装了rabbitmq管理工具,并一直在研究如何从芹菜和rabbitmq测试套件中创建队列。在我看来,芹菜正在孤立这些队列,并且它们并没有消失。 这是测试套件生成的队列。创建一个队列,所有消息进入并发出: Celerybeat每次运行任务时都会创建一个新队列: 它将auto-delete参数设置为true,但是我不确定这些队列何时被删除。他们似乎只是慢慢地积累和消耗资源。 有人有主意吗? 谢谢。     
已邀请:
        好的,我知道了。 这是相关的文档: http://readthedocs.org/docs/celery/latest/userguide/tasks.html#amqp-result-backend   旧结果将不会自动清除,因此您必须确保使用结果,否则队列数最终将失去控制。如果您运行的是RabbitMQ 2.1.1或更高版本,则可以将x-expires参数用于队列,队列将在未使用一定时间后过期,从而使队列过期。队列到期时间可以通过CELERY_AMQP_TASK_RESULT_EXPIRES设置(以秒为单位)设置(默认情况下未启用)。     
        要增加Eric Conner对自己的问题的解决方案,http://docs.celeryproject.org/en/latest/userguide/tasks.html#tips-and-best-practices指出:   忽略您不想要的结果      如果您不关心任务的结果,请务必设置ignore_result选项,因为存储结果会浪费时间和资源。
@app.task(ignore_result=True)
def mytask(…):
    something()
     甚至可以使用CELERY_IGNORE_RESULT设置全局禁用结果。 与Eric的答案一起,可能是管理结果后端的最低限度的最佳实践。 如果您不需要结果后端,请设置CELERY_IGNORE_RESULT或根本不设置结果后端。如果确实需要结果后端,请设置CELERY_AMQP_TASK_RESULT_EXPIRES以防止未使用的结果累积。如果您不需要特定的应用程序,请按上述设置本地忽略。     

要回复问题请先登录注册