Gearmanサーバがどんな状態なのかチェックしたりするのに、Telnetでtext-baseなプロトコルで操作ができる。
基本的な使い方
まずはGearmanサーバの起動。
$ gearmand -d
-d
オプションはデーモン起動。デフォルトで7003番portを使うので、ここでtelnet
でlocalhost: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個までしかタスクが積まれなくなる。起動中のものでもコレで設定を変えられる。