我正在运行 gearman 工作人员以将后台作业分配给多个工作人员。为了监视这些后台作业并在崩溃时重新启动,我们使用supervisord作为进程管理系统。
gearman 工作代码与官方示例一样非常简单:
$worker = new GearmanWorker();
$worker->addServer($config["gearman.host"],$config["gearman.port"]);
$worker->addFunction("config_job", "run_config_job");
while ($worker->work());
对于 worker 来说,我期望在作业执行期间CPU使用率会很高,完成后在等待时间内CPU使用率会变低。但有趣的是,对于长时间运行的进程,它的 CPU 使用率会随着时间的推移而增加。
有谁知道 CPU 使用率随着时间的推移而增加的主要原因是什么?
此外,由于任务在 aws ec2 小型实例上运行,平均有多少工作人员可以在单个仅工作人员实例中有效并行运行?
最佳答案
PHP 并不是专门针对此用例设计的,定期重新启动工作线程可能是明智的做法。如果您在每次作业后没有完全清理,则可能会遇到本质上的内存泄漏。
小型实例具有单个核心,这意味着它们一次可以最有效地运行一项作业。但是,如果您的作业因任何原因(例如 API 响应)需要等待,您可能可以同时运行多个作业。
关于php - 随着时间的推移,增加 Gearman Worker 的 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24125502/