Laravel Artisan Queues - hohe CPU-Auslastung

Ich habe in Laravel Warteschlangen für meine Verarbeitungsskripte eingerichtet. Ich benutze Beanstalkd und Supervisord. Es gibt 6 verschiedene Röhrchen für verschiedene Verarbeitungsarten.

Das Problem ist, dass der Handwerker für jede Röhre ständig jede Sekunde Arbeiter hervorbringt. Der Worker-Code scheint für 1 Sekunde zu schlafen und dann verwendet der Worker-Thread 7-15% CPU, multiplizieren Sie dies mit 6 Röhren ... und ich hätte gerne mehrere Arbeiter pro Röhre. Meine CPU wird aufgefressen.

Ich habe versucht, den 1-Sekunden-Schlaf auf 10 Sekunden zu ändern. Dies hilft, aber es gibt immer noch einen großen CPU-Anstieg alle 10 Sekunden, wenn die Arbeiter wieder aufwachen. Ich bearbeite derzeit noch nicht einmal etwas, weil die Warteschlangen komplett leer sind, sondern nur die Arbeiter, die nach etwas suchen, was sie tun können.

Ich habe auch getestet, um die CPU-Auslastung von Laravel zu sehen, als ich die Seite in einem Browser aktualisiert habe, und das schwebte um 10%. Ich bin im Moment auf einer Instanz mit niedrigem Rackspace, damit könnte ich es erklären, aber es scheint so Die Arbeiter drehen jedes Mal, wenn sie aufwachen, eine Laravel-Instanz auf.

Gibt es keine Möglichkeit, dies zu lösen? Muss ich nur eine Menge Geld in einen teureren Server stecken, um zu sehen, ob ein Job fertig ist?

BEARBEITEN:

Es wurde eine Lösung gefunden ... Es wurde NICHT die Handwerker-Warteschlange verwendet: Listener oder Warteschlange: Arbeit. Ich habe den Warteschlangencode überprüft und es scheint keinen Weg zu finden, um dieses Problem zu umgehen für mehr Arbeit zu tun.

Stattdessen habe ich meinen eigenen Listener mit Pheanstalk geschrieben. Ich verwende immer noch Laravel, um Dinge in die Warteschlange zu schieben, dann analysiert mein benutzerdefinierter Listener die Warteschlangendaten und löst dann einen handwerklichen Befehl aus, um ausgeführt zu werden.

Jetzt ist meine CPU-Auslastung für meine Listener unter% 0. Das einzige Mal, dass meine CPU jetzt hochfährt, ist, wenn sie tatsächlich Arbeit findet und dann den Befehl auslöst. Ich bin damit einverstanden.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage