Увеличьте загрузку процессора Gearman Worker с течением времени

Я использую 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, сколько рабочих процессов в среднем могут эффективно работать параллельно в одном экземпляре, предназначенном только для рабочих?


person Rana    schedule 09.06.2014    source источник


Ответы (1)


PHP не особенно хорошо разработан для этого варианта использования. Возможно, будет разумно перезапускать рабочие процессы через регулярные промежутки времени. Если вы не выполняете полную очистку после каждого задания, вы можете столкнуться с утечкой памяти.

Маленькие экземпляры имеют одно ядро, что означает, что они будут наиболее эффективно выполнять одно задание за раз. Однако, если вашим заданиям нужно подождать по какой-либо причине, например, для ответа API, вы можете иметь возможность запускать несколько заданий одновременно.

person datasage    schedule 09.06.2014
comment
насчет «очистки», вы имеете в виду сборку мусора? Кроме того, если это произойдет, это может быть связано с системной памятью, но предполагает ли это также влияние на использование ЦП? - person Rana; 09.06.2014
comment
Сборка мусора работает только тогда, когда переменной не присвоено значение. В ваших работах могут быть элементы, которые собирают данные (например, система регистрации), но никогда не очищают их. Если вы начинаете увеличивать использование памяти до достаточного, когда вы в конечном итоге переходите в пространство подкачки, это увеличит использование ЦП. - person datasage; 09.06.2014