如何获得齿轮箱中特定类型的排队作业数量?

时间:2010-07-31 15:38:41

标签: php gearman

我有一些齿轮工作的客户发送工作,比如job1。

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

处理这项工作需要10秒钟。 我想跟踪有多少'job1'工作等待工人在任何给定时间工作。我怎么能这样做?

7 个答案:

答案 0 :(得分:31)

为了快速检查,我使用这个bash one-liner:

(echo status ; sleep 0.1) | netcat 127.0.0.1 4730

这将打开与localhost上运行的gearman实例的连接,并发送 status 查询。它包含该实例上的作业的名称和数量。然后,可以使用grep / awk / wc等处理这些信息,以便进行报告和提醒。

我也对 workers 查询做了同样的事情,该查询显示了所有连接的工作者。

(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730

睡眠是为了保持连接打开足够长的时间以便回复。

管理命令的完整列表,以及输出在http://gearman.org/protocol/处的含义。只需搜索“管理协议”。

答案 1 :(得分:12)

要扩展d5ve的答案,请添加-w参数以“超时”你的netcat连接,否则你永远不会回到命令提示符。

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

答案 2 :(得分:5)

telnet localhost 4730
status

worker_name total_queue currently_running number_of_workers
job1         1          1                 9

答案 3 :(得分:2)

我使用的gearman_topmod-gearman的一部分。

网站的示例输出:

+-----------------------+--------+-------+-------+---------+
| 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       |
+-----------------------+--------+-------+-------+---------+

答案 4 :(得分:1)

看起来没有任何直接的方式来获取此信息。

以下是一些选项。首先,if you can grab job handles as you create them(搜索“说到检查状态”),您可以将它们存储在某个中心位置,并从任何客户端查询它们。

其次,您可以将Gearman服务器设置为使用persistent queues,然后自己对队列运行查询。这可能是两个选项中更容易和更清晰的。

答案 5 :(得分:1)

Gearmand有一个可以查询的telnet接口。 (协议的具体细节可以在gearman网站上找到 - http://gearman.org/?id=protocol

我在这里使用此代码作为滚动我自己的起点。 https://github.com/liorbk/php/blob/master/GearmanTelnet.php (这段代码本身非常好,你应该能够开箱即用)

这不是一个漂亮的解决方案,但是直到有人改进了gearman管理界面,所以你可以通过PHP直接交谈或为它编写插件,你就可以自己了

答案 6 :(得分:0)

在Ubuntu 18.04上,我默认安装了gearadmin二进制文件和gearman软件包。

gearadmin --help
可以使用gearadmin --status代替netcat替代方法:

gearadmin --status
queue1    334     10      10

还有一个班轮:
while :; do gearadmin --status; sleep 1; done