Sellerie - Speicherverbrauch minimieren
Haben wir ~300 celeryd Prozesse laufen unter Ubuntu 10.4 64-bit , im idle-jeder Prozess braucht ~19 MB RES, ~174mb VIRT, so sind es rund 6 GB RAM im idle-Modus für alle Prozesse.
Im aktiven Status - Prozess dauert bis zu 100 MB RES und ~300mb VIRT
Jeder Prozess verwendet minidom(xml-Dateien sind < 500kb, einfache Struktur) und das urllib.
Wir mit TheLittleOne ist - wie können wir verringern die RAM-Leistungsaufnahme - zumindest für die idle-Arbeiter, werden wohl einige Sellerie-oder python-Optionen kann helfen?
Wie, um zu bestimmen, welcher Teil nimmt am meisten Speicher?
UPD: thats Flug Suchagenten, die ein Arbeitnehmer für eine Agentur/Datum. Wir haben 10 Einrichtungen, die ein Benutzer suchen == 9 Termine, somit haben wir 10*9-Agenten pro Benutzer suchen.
Ist es möglich, start celeryd Prozesse auf die Nachfrage zu vermeiden, brachliegende Arbeitskräfte(so etwas wie MaxSpareServers apache)?
UPD2: Agent-Lebenszyklus ist - senden von HTTP-request, warten auf Antwort ~10-20 sec parse-xml( dauert weniger als 0,02 s), Ergebnis speichern in MySQL
- haben Sie versucht, serverfault.com oder #Sellerie auf irc.freenode.net ?
- serverfault leer ist, nur leider
- Warum so viele idle
celeryd
Server? - Ich habe einen großen newsletter mit nur 8 Arbeiter, die ich senden kann 500k E-Mails/Stunde. Schwer vorstellbar, eine Anwendung, die braucht so viele Arbeiter.
- das ist für die Flugsuche Agenten, einen Arbeiter für eine Agentur/Datum. Wir haben 10 Einrichtungen, die ein Benutzer suchen == 9 Termine, somit haben wir 10*9-Agenten pro Benutzer Suche
- Bitte update Ihre Frage, nicht, Kommentare hinzufügen. (2) Warum so viele? Wenn Sie sind im Leerlauf mehr als 50% der Zeit, Sie haben 2x so viele, wie Sie benötigen, Recht? Warum gibt es alle - idle-Servern?
- wenn Sie eine Verbindung direkt zum Flug Unternehmen webservices verstehe ich besser das problem.
- Scardine - das ist richtig, wir haben Threads für jede der 9 Flug-Unternehmen arbeiten wir mit
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen:
http://docs.celeryproject.org/en/latest/userguide/workers.html#concurrency
Es klingt wie Sie haben einen Arbeiter pro celeryd. Das scheint falsch. Sollten Sie Dutzende Arbeiter pro celeryd. Halten Sie die Erhöhung der Zahl der Arbeitnehmer (und der Senkung der Anzahl der celeryd ist), bis Ihr system ist sehr beschäftigt und sehr langsam.
S. Lott ist richtig. Die wichtigste Instanz verbraucht die Nachrichten und überträgt Sie an worker-pool-Prozesse. Es gibt wohl keinen Punkt in der Laufenden 300-pool-Prozesse auf einer einzigen Maschine! Versuchen Sie, 4 oder 5 multipliziert mit der Anzahl der CPU-Kerne. Sie gewinnen etwas mehr laufen als auf celeryd mit ein paar Prozesse, die jeder haben manche Menschen, aber Sie haben zu Experimentieren, für Ihre Anwendung.
Sehen http://celeryq.org/docs/userguide/workers.html#concurrency
Für die kommende Version 2.2 arbeiten wir an Eventlet pool-Unterstützung, das kann
eine gute alternative für IO-bound-Aufgaben, ermöglicht die Ausführung von 1000+ - threads
mit minimalen Speicher-overhead, aber es ist noch experimentell und bugs werden behoben
für die Finale Version.
Sehen http://groups.google.com/group/celery-users/browse_thread/thread/94fbeccd790e6c04
Den kommenden 2.2 Version ist auch die Unterstützung für autoscale, die Hinzugefügt/entfernt Prozess auf Nachfrage. Siehe das Changelog:
http://ask.github.com/celery/changelog.html#version-2-2-0
(das changelog ist nicht komplett geschrieben)
Die Natürliche Zahl der Arbeitnehmer ist in der Nähe der Anzahl der Kerne haben. Die Arbeitnehmer sind dazu da, dass cpu-intensive Aufgaben kann der gesamte Kern effizient. Der Makler ist es so, dass Anfragen, die keine Arbeiter auf der hand, Sie zu verarbeiten, sind in der Warteschlange gehalten. Die Anzahl der Warteschlangen können hoch sein, aber das bedeutet nicht, dass Sie eine hohe Zahl der Broker entweder. Einem einzigen broker sollte ausreichen, oder Sie könnten Splitter die Warteschlangen an einen Makler pro Maschine, wenn sich später herausstellt, fast worker-queue-Interaktion ist von Vorteil.
Dein problem scheint nichts mit dass. Ich vermute, dass Ihre Agenturen nicht bieten eine message queue api, und Sie haben zu halten, um viele Anforderungen. Wenn ja, müssen Sie ein paar (Betonung auf nicht viele) evented Prozesse, beispielsweise verdreht oder node.js basiert.
Verwenden autoskalierender. Dies ermöglicht die Anzahl der Arbeitnehmer, die unter jedem celeryd Instanz verstärkt oder descreased, wie gebraucht. http://docs.celeryproject.org/en/latest/userguide/workers.html#autoscaling