RabbitMQ auf EC2 Verbraucht Unmengen von CPU
Ich versuche, RabbitMQ mit Sellerie und Django geht auf eine EC2-Instanz zu tun, ein paar ziemlich grundlegende hintergrund-Verarbeitung. Ich bin mit rabbitmq-server 2.5.0 auf einem großen EC2-Instanz.
Ich heruntergeladen und installiert die test-client nach der Anleitung hier (ganz unten auf der Seite). Ich habe nur dass das test-Skript gehen und bin immer die erwartete Ausgabe:
recving rate: 2350 msg/s, min/avg/max latency: 588078478/588352905/588588968 microseconds
recving rate: 1844 msg/s, min/avg/max latency: 588589350/588845737/589195341 microseconds
recving rate: 1562 msg/s, min/avg/max latency: 589182735/589571192/589959071 microseconds
recving rate: 2080 msg/s, min/avg/max latency: 589959557/590284302/590679611 microseconds
Das problem ist, dass es verbraucht eine unglaubliche Menge an CPU:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
668 rabbitmq 20 0 618m 506m 2340 S 166 6.8 2:31.53 Strahl.smp
1301 ubuntu 20 0 2142m 90m 9128 S 17 1.2 0:24.75 java
Ich wurde getestet auf eine micro-instance von früher und es war völlig verbrauchen alle Ressourcen, die auf die Instanz.
Ist das zu erwarten? Mache ich etwas falsch?
Dank.
Edit:
Der eigentliche Grund für diesen Beitrag war, dass celerybeat zu funktionieren schien in Ordnung für eine Weile und dann plötzlich verbrauchen alle Ressourcen auf dem system. Ich installierte die rabbitmq-management-tools und haben untersucht, wie die Warteschlangen werden erstellt von Sellerie und aus dem rabbitmq-test-suite. Es scheint mir, dass Sellerie ist, Verwaisung dar, diese Warteschlangen, und Sie sind nicht Weg.
Hier ist die Warteschlange, wie generiert der test-suite. Eine queue erstellt und alle Nachrichten gehen hinein und kommen heraus:
Celerybeat erstellt eine neue queue für jedes mal, wenn es startet die Aufgabe:
Er setzt die auto-delete-parameter auf true, aber ich bin mir nicht ganz sicher, Wann diese Warteschlangen werden gelöscht. Sie scheinen nur langsam aufbauen, und fressen Ressourcen.
Hat jemand eine Idee?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich fand es heraus.
Hier ist das entsprechende Stück der Dokumentation:
http://readthedocs.org/docs/celery/latest/userguide/tasks.html#amqp-result-backend
Hinzufügen Eric Conner ' s Lösung zu seinem eigenen problem, http://docs.celeryproject.org/en/latest/userguide/tasks.html#tips-and-best-practices Staaten:
Dass zusammen mit Eric ' s Antwort ist wahrscheinlich ein minimum von best practices für die Verwaltung Ihrer Ergebnisse backend.
Wenn Sie nicht brauchen, ein Ergebnisse-backend-set CELERY_IGNORE_RESULT oder gar nicht die Ergebnisse backend überhaupt. Wenn Sie brauchen Ergebnisse backend eingestellt CELERY_AMQP_TASK_RESULT_EXPIRES, das es zu schützen gegen nicht verwendete Ergebnisse den Aufbau. Wenn Sie es nicht brauchen für eine bestimmte app, die lokale ignorieren wie oben.