2

下午,

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

在命令行上,当我运行

gearman --help

它说

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

这似乎是一个理想的选择,我们可以将其设置为 50~k 并且知道工人将死亡并且问题得到解决。但是,通过查看 gearman 的 pecl 库,我看不到可以在哪里添加/配置它。

有一个 AddOption 方法需要一个 int - 但我在文档或源代码中找不到任何可以设置它的参考。

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

有任何想法吗?

4

2 回答 2

1

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

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

于 2012-07-12T11:16:29.907 回答
1

您可能应该发布一些有关如何处理工人的代码,因为添加这样的限制通常是微不足道的。基于手册中的示例:

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

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

while ($worker->work()); 

工作人员一次执行一个操作,因此您需要做的就是将 while 循环替换为其他操作。

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

我不知道你是如何让工人活着的,但我发现Upstart工作得很好。

于 2012-07-12T13:04:03.183 回答