Я использую gearman worker для распределения фоновых заданий между несколькими рабочими. Чтобы отслеживать эти фоновые задания и перезапускать их в случае сбоя, мы используем supervisord в качестве системы управления процессами.
Рабочий код gearman довольно прост, как официальный пример:
$worker = new GearmanWorker();
$worker->addServer($config["gearman.host"],$config["gearman.port"]);
$worker->addFunction("config_job", "run_config_job");
while ($worker->work());
Для рабочих, как я ожидал, во время выполнения задания загрузка ЦП будет высокой, после завершения она станет низкой во время ожидания. Но что интересно, для длительных процессов он со временем увеличивает загрузку ЦП.
Кто-нибудь знает, какова основная причина возрастающей загрузки ЦП с течением времени?
Кроме того, поскольку задачи выполняются на небольших экземплярах aws ec2, сколько рабочих процессов в среднем могут эффективно работать параллельно в одном экземпляре, предназначенном только для рабочих?