使用gearman时,由于gearman没有权限控制,导致任何能连接到job server的程序都能注册函数,尤其在开发阶段,可能有来自不同机器上的程序连接了job server注册了一些测试函数。
当使用gearadmin –status查看query status时,会发现一些不知所云的注册函数,如:
test 0 0 1
那怎样知道这个test函数是哪个程序注册的呢?
- 先gearadmin –workers | grep test
74 172.16.18.165 - : test
这里会显示fd|ip|function,如前面的74就是gearmand程序打开的文件描述符,172.16.18.165表示注册函数的程序所在的主机地址。
记下这里的fd和ip
- ps -ef|grep gearmand,查看gearmand进程pid
root 6717 3130 0 Jun26 ? 02:13:27 /usr/local/gearmand
- ll /proc/6717/fd | grep 74
lrwx------ 1 root root 64 9ÔÂ 23 12:41 74 -> socket:[543424698]
看到 socket:[543424698]
- grep 543424698 /proc/net/tcp
或 - gre 543424698 /proc/net/tcp6
77: 721210AC:127A A51210AC:EB08 01 00000000:00000000
721210AC:127A表示172.16.18.114:4730,表示gearmand的监听地址及端口
A51210AC:EB08表示172.16.18.165:60168,表示连接gearman的work(即注册test函数的进程)客户端的地址及端口号
- 登录172.16.18.165,netstat -apn | grep 60168
tcp 0 0 172.16.18.165:60168 172.16.18.114:4730 ESTABLISHED 29172/gearman
29172/gearman就是注册test函数的进程pid
- ps -ef|grep 29172
root 29172 29077 0 14:15 pts/10 00:00:00 ./gearman -h 172.16.18.114 -w -f test
到这里看到test函数是位于172.16.18.165机上的gearman程序注册的