Deutsch
Germany.ruФорумы → Архив Досок→ Linux & Co

supervisor [too many start retries too quickly]

17.04.14 12:55
supervisor [too many start retries too quickly]
 
  Posmotrim знакомое лицо
Posmotrim
Последний раз изменено 17.04.14 13:04 (Posmotrim)
Всем привет,
есть php скрипт, который выгребает сообщения из очереди rabbitmq и выполняет определённые задания. Тоесть некий сервер задач. Так как в пыхе подтекает память, то скрипт, после определённого кол-ва выполненных задач раз завершается, ну а supervisor следит за ним и поднимает заново. При определённых условиях накапливается большое кол-во мелких задач, выполнение которых длится милисекунды.
В логе супервизора имею:
2014-04-15 17:30:29,516 INFO spawned: 'mq' with pid 11373
2014-04-15 17:30:29,569 INFO exited: mq (exit status 0; not expected)
2014-04-15 17:30:30,576 INFO spawned: 'mq' with pid 11375
2014-04-15 17:30:30,649 INFO exited: mq (exit status 0; not expected)
2014-04-15 17:30:32,658 INFO spawned: 'mq' with pid 11377
2014-04-15 17:30:32,733 INFO exited: mq (exit status 0; not expected)
2014-04-15 17:30:35,744 INFO spawned: 'mq' with pid 11379
2014-04-15 17:30:35,818 INFO exited: mq (exit status 0; not expected)
2014-04-15 17:30:36,820 INFO gave up: mq entered FATAL state, too many start retries too quickly
после того, как перешли в статус FATAL - супервизор перестаёт запускать данную задачу. Пока удалось выкрутиться следующим образом: при старте скрипта замеряю время, и при выходе из него, если не прошла 1 секунда, просто жду.
Условно:

public function actionUserService()
{
$started = time();

//...
while (true)
{
if ($envelope = $queue->get())
{
//тут обработка задачи
//....
//пусть supervisor нас перезапустит
if($attempts++ > self::MAX_ATTEMPTS_NUMBER)
{
//вот такой костыль, но ничего лучшего не могу придумать :((
if(time() - $started < 2)
{
sleep(1);
}
break;
}
}
else
{
sleep(1); //тут не критично ждать, так как задач нет
}
}
}


Костыль рабочий, но, при большом количестве мелких задач появляется пауза в одну секунду между обработками пакетов задач. Фактически мы может получится , что мы ждём больше, чем работаем.
Если можно, без рассуждений, на тему уместет ли тут пхп.
Спасибо.

 

Перейти на