Le céleri - réduire la consommation de mémoire
Nous avons ~300 celeryd les processus en cours sous Ubuntu 10.4 64 bits , inactif chaque processus prend ~19 mo RES, ~174mb VIRT, donc - c'est aux alentours de 6 go de RAM au ralenti pour tous les processus.
Dans l'état actif - processus prend jusqu'à 100 mo de RES et ~300mo VIRT
Chaque processus utilise minidom(fichiers xml sont < 500kb, structure simple) et urllib.
Quetions est - comment pouvons-nous diminuer la RAM consuption - au moins pour le ralenti travailleurs, probablement un peu de céleri ou python options peuvent aider?
Comment faire pour déterminer quelle part prend le plus de mémoire?
UPD: thats vol d'agents de recherche, d'un travailleur pour une agence/jour. Nous avons 10 agences, un utilisateur search == 9 dates, nous avons donc 10*9 agents par un utilisateur recherche.
Est-il possible de commencer celeryd processus à la demande pour éviter d'inactivité des travailleurs(quelque chose comme MaxSpareServers sur apache)?
UPD2: Agent de cycle de vie est - envoi de la requête HTTP, attendre la réponse ~10-20 sec, parse xml( prend moins de 0,02 s), d'enregistrer le résultat de MySQL
serverfault est vide, unforunately
Pourquoi tant de ralenti
celeryd
serveurs?J'ai un gros newsletter avec seulement 8 travailleurs, je peux envoyer 500 messages/heure. Difficile d'imaginer une application qui a besoin de nombreux travailleurs.
c'est le vol d'agents de recherche, d'un travailleur pour une agence/jour. Nous avons 10 agences, un utilisateur search == 9 dates, nous avons donc 10*9 agents par un utilisateur recherche
OriginalL'auteur Andrew | 2010-12-03
Vous devez vous connecter pour publier un commentaire.
Lire ceci:
http://docs.celeryproject.org/en/latest/userguide/workers.html#concurrency
Il semble que vous avez un travailleur par celeryd. Qui semble erroné. Vous devriez avoir des dizaines de travailleurs par celeryd. D'augmenter le nombre de travailleurs (et de diminuer le nombre de celeryd) jusqu'à ce que votre système est très occupé et très lent.
Scardine: "chaque travailleur donne naissance à un nouveau celeryd instance". Ne semble pas approprié, si la documentation suggère "Pour l'exemple 3 celeryd avec 10 processus de travail de chacun".
Je suis en cours d'exécution " ps " sur mon serveur, au moins avec djcelery je vois l'un des principaux celeryd exemple + un pour chaque travailleur.
Scardine: je pense que les docs ne sont que de parler de la principale instance. Mais je ne suis pas sûr à 100%. À ce stade, vous devriez probablement être la lecture du céleri docs de plus près pour voir comment il peut être configuré.
gras! faisant valoir sans être sûr à 100%, sans faire de tests et n'ayant aucune expérience avec le sujet. Je suis à la peur de (-1) embarras pour agir de la sorte - bravo pour votre courage.
OriginalL'auteur S.Lott
S. Lott est droit. La principale instance consomme des messages et des délégués à travailleur piscine processus. Il n'y a probablement pas de point dans l'exécution de 300 pool de processus sur une seule machine! Essayer 4 ou 5 multiplié par le nombre de cœurs du PROCESSEUR. Vous pouvez obtenir quelque chose en cours d'exécution de plus que sur celeryd avec un peu de chaque processus, certaines personnes ont, mais vous pourriez avoir à expérimenter pour votre application.
Voir http://celeryq.org/docs/userguide/workers.html#concurrency
Pour la prochaine version 2.2, nous travaillons sur l'Eventlet piscine de support, cela peut
être une bonne alternative pour IO-tâches limitées, qui vous permettra d'exécuter de+ de 1000 threads
avec un minimum de surcharge de la mémoire, mais il est encore au stade expérimental et les bugs sont corrigés
pour la sortie de la version finale.
Voir http://groups.google.com/group/celery-users/browse_thread/thread/94fbeccd790e6c04
La prochaine version 2.2 également bénéficier d'un appui pour autoscale, qui ajoute/supprime des processus sur demande. Voir le Changelog:
http://ask.github.com/celery/changelog.html#version-2-2-0
(ce changelog n'est pas totalement encore écrit)
Comme je l'ai dit, le eventlet de soutien dans le Céleri maître est beaucoup mieux à ce genre d'application. Les Chances sont que vous n'aurez pas plus de demandes/s avec 300 processus que vous faites avec 15 processus. (si vous avez 8 cœurs), plus de chances vous aurez de moins de performance, car il sera de changement de contexte bousiller.
OriginalL'auteur asksol
Le nombre de travailleurs est proche du nombre de cœurs que vous avez. Les travailleurs sont là pour que les tâches consommatrices d'uc pouvez utiliser un ensemble de base de manière efficace. Le courtier est là pour que les demandes qui n'ont pas de travailleur à portée de main pour les traiter sont conservés en file d'attente. Le nombre de files d'attente peuvent être élevés, mais cela ne signifie pas que vous avez besoin d'un grand nombre de courtiers. Un seul courtier devrait suffire, ou vous pourriez éclat files d'attente à un courtier par machine si plus tard, il s'avère rapide travailleur-file d'attente de l'interaction est bénéfique.
Votre problème semble pas liée à cela. Je devine que les agences ne fournissent pas un message de la file d'attente de l'api, et vous devez tenir autour d'un nombre de demandes. Si oui, vous avez besoin d'un peu de (l'accent sur pas beaucoup) evented processus, par exemple tordus ou des node.js en fonction.
OriginalL'auteur Tobu
Utiliser la mise à l'échelle automatique. Ainsi, le nombre de travailleurs en vertu de chaque celeryd instance à la hausse ou à faire baisser tant que de besoin. http://docs.celeryproject.org/en/latest/userguide/workers.html#autoscaling
OriginalL'auteur Brendan Maguire