tokuhiromのgearman の worker process にスコアボードをつけてみる (git) のスコアボードをネットワーク越しに確認できるようにしてみた。
git: http://github.com/kazeburo/gearman-starter.pl
具体的にはworkerのloopに入る前に指定したportをlistenするプロセスをforkして、そいつにアクセスすることで、ステータス(スコアボード)を取得できる。
ステータスを表示するために—port と —listen の2つのオプションを追加した。起動は
% perl -Ieg/lib ./gearman-starter.pl -s 127.0.0.1:7004 --scoreboard-dir /tmp/test --listen localhost --port 7005 MyWorker
な感じ。telnetでport 7005にアクセスすると、すぐにステータスが返ってくる
起動直後
% telnet localhost 7005
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
BusyWorkers: 0
IdleWorkers: 10
--
pid Status Counter Comment
15785 . 0
15786 . 0
15787 . 0
15788 . 0
15789 . 0
15790 . 0
15791 . 0
15792 . 0
15793 . 0
15794 . 0
Connection closed by foreign host.
clientを動かすと、
BusyWorkers: 1
IdleWorkers: 9
--
pid Status Counter Comment
15785 _ 2
15786 _ 4
15787 . 0
15788 . 0
15789 . 0
15790 A 1 127.0.0.1:7004//H:vs1-1:94425
15791 . 0
15792 . 0
15793 . 0
15794 . 0
のように変化する。pidが「15790」がActive(Busy)になってるのがわかる。
これで監視ができるゥ。
あと、Gearman::Worker->workは内部で無限ループする。ループを止めるにはstop_ifのcallbackを渡す必要があるので注意