我正在运行gearman worker为多个工作人员分配后台工作。为了监控那些后台工作并在崩溃时重新开始,我们使用supervisord作为流程管理系统。
作为官方示例,齿轮工人代码非常简单:
$worker = new GearmanWorker();
$worker->addServer($config["gearman.host"],$config["gearman.port"]);
$worker->addFunction("config_job", "run_config_job");
while ($worker->work());
对于工作人员,我期望在作业执行期间CPU使用率很高,在完成后如果在等待时间内变低。但有趣的是,对于长时间运行的进程,它会随着时间的推移而增加CPU使用率。
有谁知道随着时间的推移增加CPU使用率的主要原因是什么?
此外,由于任务在aws ec2小实例上运行,平均有多少工作人员可以在一个仅限工作者的实例中并行运行?
答案 0 :(得分:2)
PHP并不是特别为这个用例设计的,谨慎的做法是定期重启工作者。如果你在每次工作后没有完全清理,你可能会遇到本质上是内存泄漏的问题。
小型实例具有单个核心,这意味着它们最有效地一次运行一个作业。但是,如果您的工作需要等待任何原因,例如API响应,您可能可以同时运行多个作业。