Gearman工人 - 限制工人将要处理的工作量

时间:2012-07-11 02:27:32

标签: php gearman

下午,

我们在生产环境中使用Gearman,我们有几个工人正在运行,每天处理100个工作量(忙碌的工人)。我们有一个轻微的内存问题,泄漏非常小,但几天后它正在积累。

在命令行中,当我运行

gearman --help

它说

...
Worker options:
-c <count> - Number of jobs for worker to run before exiting

这似乎是理想的选择,我们可以将它设置为50~k并且知道工人会死掉并且问题得到解决。然而,通过pecl库查找gearman我无法看到我可以在哪里添加/配置它。

有一个AddOption方法,它接受一个int - 但是我在文档或源代码中找不到任何可以设置它的引用。

我不想配置自己的管理系统......

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

GearmanManager允许您指定每个工作人员在重新启动之前应该生存的时间(以秒为单位,而不是执行任务)。

否则,您可以跟踪工作中执行的任务数,并在while循环中使用bash-script启动它。当你达到50k时,只需退出()并让bash脚本重新启动你的工作。

答案 1 :(得分:0)

您应该发布一些关于如何处理工作人员的代码,因为添加这样的限制通常是微不足道的。根据手册中的样本:

$worker = new GearmanWorker(); 
$worker->addServer(); 

$worker->addFunction("reverse", "my_reverse_function"); 

while ($worker->work()); 

worker一次执行一个操作,所以你需要做的就是用while循环替换其他东西。

for ($i; 50000 > $i; ++$i) { $worker->work(); }

我不知道你是如何让工人保持活力的,但我发现Upstart可以很好地工作。