Subscribed unsubscribe Subscribe Subscribe

Gearman Administrative Protocol

Perl

Gearmanサーバがどんな状態なのかチェックしたりするのに、Telnetでtext-baseなプロトコルで操作ができる。

基本的な使い方

まずはGearmanサーバの起動。

$ gearmand -d

-dオプションはデーモン起動。デフォルトで7003番portを使うので、ここでtelnetlocalhost:7003に繋いでみる.
Administrative Protocolでサポートされているコマンドは以下。

  • workers
  • status
  • maxqueue
  • version
  • shutdown
$ telnet localhost 7003
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
workers
5 127.0.0.1 - :
.
status
.
version
1.11
shutdown
OK
Connection closed by foreign host.

shutdownでgearmandが止まる。

workerを登録してみる

$ gearmand -d

をもう一度立ち上げて、

$ perl -MGearman::Worker -e '$w = Gearman::Worker->new(job_servers => ["127.0.0.1"]); $w->register_function(hoge => sub { sleep 1; warn "hoge" }); $w->work while 1'
$ perl -MGearman::Worker -e '$w = Gearman::Worker->new(job_servers => ["127.0.0.1"]); $w->register_function(fuga => sub { sleep 1; warn "fuga" }); $w->work while 1'

とかを上げてみる。

$ telnet localhost 7003
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
workers
5 127.0.0.1 - :
6 127.0.0.1 gdlwgytexquqsabtmafsjmupzvfkvy : hoge
7 127.0.0.1 qwicgwkbllfvnzdkuqcimpssyyumie : fuga
.
status
fuga    0       0       1
hoge    0       0       1
.

workerが登録されて待ち受けてるのが分かる。

task実行

上の状態でタスクをぼんぼん投げてみる。

$ perl -MGearman::Client -e '$c = Gearman::Client->new(job_servers => ["127.0.0.1"]); $c->dispatch_background($_ % 2 ? "hoge" : "fuga") for 1 .. 100'

これを実行してからstatusを叩いてみると、少しずつ消化されていくのが分かる。

status
fuga    45      1       1
hoge    45      1       1
.
status
fuga    43      1       1
hoge    43      1       1
.
status
fuga    41      1       1
hoge    41      1       1
.
status
fuga    40      1       1
hoge    40      1       1
.

maxqueueを変更する

maxqueue fuga 10
OK

とやってから、また

$ perl -MGearman::Client -e '$c = Gearman::Client->new(job_servers => ["127.0.0.1"]); $c->dispatch_background($_ % 2 ? "hoge" : "fuga") for 1 .. 100'

を実行してみる。

status
fuga    9       1       1
hoge    48      1       1
.

"fuga"ワーカには10個までしかタスクが積まれなくなる。起動中のものでもコレで設定を変えられる。