oop — Как правильно использовать объект в PHP-сервисе

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

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

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

0

Решение

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

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

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

#!/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 -- $@
ERR=$?

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

# unplanned exit, pause, and restart
sleep 10

exec $0 $@
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]