15 Stimmen

Wie kann ich die Anzahl der in der Warteschlange stehenden Aufträge eines bestimmten Typs in gearman ermitteln?

Ich habe eine Reihe von Gearman-Kunden, die mir einen Auftrag schicken, z. B. Auftrag1.

$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');

Es dauert etwa 10 Sekunden, diesen Auftrag zu bearbeiten. Ich möchte feststellen, wie viele "job1"-Aufträge zu einem bestimmten Zeitpunkt darauf warten, von einem Arbeiter bearbeitet zu werden. Wie kann ich das tun?

31voto

d5ve Punkte 1132

Zur schnellen Überprüfung verwende ich diesen Bash-Einzeiler:

(echo status ; sleep 0.1) | netcat 127.0.0.1 4730

Dies öffnet eine Verbindung zu einer gearman-Instanz, die auf localhost läuft, und sendet die Status Abfrage. Diese enthält den Namen und die Anzahl der Aufträge auf dieser Instanz. Die Informationen können dann verarbeitet werden mit grep / awk / wc usw. für Berichte und Warnmeldungen.

Das Gleiche mache ich auch mit dem Arbeiter Abfrage, die alle angeschlossenen Arbeiter anzeigt.

(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730

Der Ruhezustand dient dazu, die Verbindung lange genug für die Antwort offen zu halten.

Die vollständige Liste der Verwaltungsbefehle und die Bedeutung der Ausgaben finden Sie unter http://gearman.org/protocol/ . Suchen Sie einfach nach "Verwaltungsprotokoll".

12voto

iandouglas Punkte 3977

Um die Antwort von d5ve zu erweitern, fügen Sie den Parameter -w hinzu, um Ihre netcat-Verbindung zu unterbrechen, da Sie sonst nie zu einer Eingabeaufforderung zurückkehren.

$ (echo status ; sleep 0.1) | sudo netcat 127.0.0.1 4730 -w 1

9voto

telnet localhost 4730
status

worker_name total_queue currently_running number_of_workers
job1         1          1                 9

3voto

jchook Punkte 5914

Ich benutze gearman_top die Teil von mod-gearman .

Beispiel für die Ausgabe auf der Website:

+-----------------------+--------+-------+-------+---------+
| Name                  | Worker | Avail | Queue | Running |
+-----------------------+--------+-------+-------+---------+
| check_results         | 1      | 1     | 0     | 0       |
| host                  | 3      | 3     | 0     | 0       |
| service               | 3      | 3     | 0     | 0       |
| eventhandler          | 3      | 3     | 0     | 0       |
| servicegroup_jmx4perl | 3      | 3     | 0     | 0       |
| hostgroup_japan       | 3      | 3     | 0     | 0       |
+-----------------------+--------+-------+-------+---------+

2voto

w00t Punkte 608

Unter Ubuntu 18.04 habe ich die gearadmin Binärdatei, die standardmäßig mit dem gearman-Paket installiert wird.

gearadmin --help
gearadmin --status kann anstelle der netcat-Alternative verwendet werden:

gearadmin --status
queue1    334     10      10

Und ein Einzeiler:
while :; do gearadmin --status; sleep 1; done

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X