2015-03-22 7 views
0

Le scénario spécifique est le suivant: un serveur exécutant beanstalkd, utilisant PHP Pheanstalk libary. J'ai un agent PHP fonctionnant en tant que service, donc il ne cesse théoriquement jamais de fonctionner.Comment utiliser correctement un objet dans un service PHP

Le code initial de l'opérateur est simplement un appel de fonction effectué pour effectuer le travail. Je voulais passer à OOP. Cela instancierait un objet pour chaque travail traité. J'imagine que sans nettoyage approprié, cela créerait une fuite de mémoire.

Quelle serait la bonne façon de créer/gérer/détruire des objets pour une utilisation dans ce type de scénario sans causer de fuites de mémoire ou d'utilisation excessive du système?

Répondre

0

J'ai exécuté des centaines de millions de travaux par le biais de PHP, avec SES, et Beanstalkd comme systèmes de files d'attente. Je ne m'inquiétais pas d'essayer de faire tourner les choses pour toujours. Si vous trouvez qu'après un travail, l'utilisation de la mémoire devient élevée, redémarrez le travailleur. De même, si vous venez de terminer votre 100e ou 1000e emploi avec ce travailleur, redémarrez à partir de zéro, juste pour nettoyer.

Il est facile d'exécuter plus de travailleurs, et il est rapide d'en commencer un nouveau. Utilise le. Si, en cours de développement, vous branchez assez de débogage, si vous trouvez une fuite de mémoire, il y a suffisamment d'informations pour savoir où et ensuite gérer.

Ceci est le script shell que je dois garder le travail PHP. Lorsque je exit(98); à partir du script, il reconnaît cela et redémarre immédiatement. J'en ajoute généralement d'autres pour les pauses planifiées et pour quitter le script. Commencez par utiliser le système de style init (arriviste, supervord, etc.) et le script continuera, et redémarrera à volonté, jusqu'à ce que vous en décidiez autrement.

#!/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

L'exigence est d'avoir aussi peu d'interaction après le fait que possible. Donc, les tâches cron ou similaires devraient être configurées pour cela. Ceci est pour la gestion des informations client, donc ~ 100% de disponibilité est un must. C'est un travailleur qui gère plus de 300 000 emplois par jour. Tuer un travailleur et en commencer un nouveau requiert un peu plus d'interaction avec le système que je ne le souhaite. – sharf