我在这里遇到一个性能问题,我似乎无法弄清楚。
问题在于执行任务太慢。根据芹菜日志,大多数任务在0.3秒内完成。
我注意到,如果我停止工人并再次启动他们,性能会提高,几乎达到200 ack / s,然后过一会儿,它变得非常慢,大约40 / s。
我不确定,但我认为这可能是经纪人问题而不是芹菜问题。 在查看几个工人的日志时,我注意到他们似乎都在执行任务,然后停下来稍作停留,然后重新开始。
感觉接收任务很慢。
关于什么可能导致这种情况的任何想法?谢谢!
一个日志示例:
Task drones.tasks.blue_drone_process_task[64c0a826-aa18-4226-8a39-3a455e0916a5] succeeded in 0.18421914400005335s: None
休息10秒
Received task: drones.tasks.blue_drone_process_task[924a1b99-670d-492e-94a1-91d5ff7142b9]
Received task: drones.tasks.blue_drone_process_task[74a9a1d3-aa2b-40eb-9e5a-1420ea8b13d1]
Received task: drones.tasks.blue_drone_process_task[99ae3ca1-dfa6-4854-a624-735fe0447abb]
Received task: drones.tasks.blue_drone_process_task[dfbc0d65-c189-4cfc-b6f9-f363f25f2713]
IMO这些任务应该执行得如此之快,以至于我无法读取日志。
我的设置是:
我将此设置用于网络抓取,有2个队列。我们称它们为“请求和流程”。
在“请求”队列I中,需要抓取的URL,在“处理”队列中,将找到该页面的URL +源代码。 (最大2.5 MB /源页面,如果大于它,我将其丢弃),因此Process队列中的所有消息最大2.5MB±1KB。
要从请求队列中执行任务,我将celery与gevent池并发300一起使用。(-P gevent -c 300 --without-gossip --without-mingle --without-heartbeat)。 4-8个工人是这样的。
要从“处理”队列中执行任务,我使用预叉池(默认)。 (-c 4 --without-gossip --without-mangle --without-heartbeat)。像这样的30名工人。
其他设置信息:
RabbitMQ配置:
Celery配置:
尝试使用较高的预取功能(例如5、10和20),但此操作无效。
答案 0 :(得分:0)
设法弄清楚。这是一个网络问题。我用于负载平衡器的EC2实例的网络性能较低。我选择了一种具有更好网络性能的新实例类型,它的运行速度惊人地快。