2015-03-22 3 views
0

Конкретный сценарий таков: сервер, на котором запущен beanstalkd, с использованием PHP-библиотеки Pheanstalk. У меня есть PHP-работник, работающий как служба, поэтому он теоретически никогда не перестает работать.Как правильно использовать объект в службе PHP

Исходный код для рабочего - это просто вызов функции, выполненный для выполнения работы. Я хотел переложить это на ООП. Это создаст экземпляр объекта для каждой обработанной работы. Я предполагаю, что без правильной очистки это создаст утечку памяти.

Что было бы правильным способом создания/управления/уничтожения объектов для использования в этом виде сценария без возникновения утечек памяти или избыточного использования системы?

ответ

0

Я запускал сотни миллионов рабочих мест через рабочих PHP, с SES и Beanstalkd в качестве систем очередей. Я не беспокоился о том, чтобы все время работало. Если вы обнаружите, что после работы использование памяти становится высоким, перезапустите работника. Аналогичным образом, если вы только что завершили свою 100-ю или 1000-ю работу с этим работником, перезапустите с нуля, просто чтобы очистить.

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

Это сценарий оболочки, который я должен оставить для работы PHP-работника. Когда I exit(98); из сценария, он распознает это и сразу же перезапускает. Обычно я добавляю других для запланированных пауз и выхожу из сценария. Начните это с любой системы стиля init, которую вы можете иметь (выскочка, супервизор и т. Д.), И скрипт будет продолжать работать и перезапускаться по своему усмотрению, пока вы не решите иначе.

#!/bin/bash 

# runBeanstalkd-worker.sh 
# a shell script that keeps looping until an exit code is given 
# if it does an unplanned exit, restart after a second - or if it's 
# some other declared error. 
# if we've restarted in a planned fashion, we don't bother with any pause 
# and for one particular code, exit the script entirely. 
# The numbers 97, 98, 99 must match what is returned from the PHP script 

nice php -q -f ./cli-beanstalk-worker.php -- [email protected] 
ERR=$? 

if [ $ERR -eq 98 ] 
then 
    # a planned restart - instantly 
    exec $0 [email protected]; 
fi 

# unplanned exit, pause, and restart 
sleep 10 

exec $0 [email protected] 
+0

Требование для как можно большего взаимодействия после того, как это возможно. Таким образом, для этого должны быть настроены задания cron или тому подобное. Это относится к обработке информации о клиентах, поэтому требуется 100% времени безотказной работы. Это рабочий, который обрабатывает 300 000 рабочих мест в день. Убийство рабочего и запуск нового требует немного большего взаимодействия системы, чем хотелось бы. – sharf