【问题标题】:Gearman workers - limiting the amount of jobs a worker will processGearman 工人 - 限制工人将处理的工作量
【发布时间】:2012-07-11 02:27:32
【问题描述】:

下午,

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

在命令行上,当我运行时

gearman --help

它说

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

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

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

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

有什么想法吗?

【问题讨论】:

  • 如果建议的答案都不起作用或接受答案,您能否提供更多信息?

标签: php gearman


【解决方案1】:

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

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

【讨论】:

  • 我已经在我的机器上安装了 gearman 管理器,并在 config.ini 文件中设置了配置。但它不起作用。
  • @RAVIMONE 然后提出问题并提供相关信息。
【解决方案2】:

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

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

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

while ($worker->work()); 

worker 一次执行一个操作,因此您只需将 while 循环替换为其他操作即可。

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

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

【讨论】:

  • 为了让工人活着,你可以使用supervisor,使用Gearman+Supervisor很常见。
猜你喜欢
  • 1970-01-01
  • 2013-02-05
  • 2023-04-04
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多