查找gearman非法注册函数进程

使用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]

  • cat /proc/net/tcp | grep 543424698
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程序注册的

你可能感兴趣的:(gearman)