我有两个不同IP地址的gearman管理员,两个客户端有40个工作人员,每个客户端有20个工作人员。
问题是,我每10分钟检查2个管理员的状态,开始时他们有相同数量的作业,但是他们的数量以不同的速度下降,admin2比admin1快3倍。
这种情况最终导致了一个问题,如果有两种巨大的工作集,例如job1有40万个工作,job2有40万个工作,job2比job1晚一个小时触发,那么每个人都会先完成其中的一半,因为另一半被admin1紧紧抓住,只有admin2完成了分派,admin1才能分派他的作业,这是一个灾难,因为我希望job1完成,但不完成其中的一半,而是一直等待其他作业的一半完成。你知道吗
所以我找到了原因。在gearman服务器中,只有当一个worker被标记为sleeping而不是is\u noop\u sent时,它才会发送noop msg,并且在发送noop msg之后,is\u noop\u sent被设置为false,并且只有在get grab job命令时才会设置为true。
但是在python gearman中,它使用一个锁来控制recv循环,如果它不能获得锁,if将传递或发送pre\u sleep命令,并将导致服务器再也不会停止工作进程。你知道吗
相关问题 更多 >
编程相关推荐