今天遇到的场景很常见, 所以收藏一下.
场景是这样的, 我们维护了一个 redis
数据, 用户反馈数据错误 , 我们观察的确存在问题. 需要去读代码. 但是 代码非常久远了.
找了很多地方 并没有进行更新操作. 所以采用如下方案找到代码.
1. redis monitor
# redis-cli -h 127.0.0.1 monitor |grep -i redis:test:hash |grep SET > test.log
2. 去重检索 IP:端口
$ cat test.log |grep SET |awk '{print $3 }' |awk -F "\]" '{print $1}' |awk -F ':' '{print $1 " "$2}' |sort -rn |uniq
10.0.0.1 31945
10.0.0.1 31813
10.0.0.1 31801
10.0.0.1 31757
10.0.0.1 31723
10.0.0.1 31703
10.0.0.1 31669
10.0.0.1 31647
10.0.0.1 31623
10.0.0.1 31611
10.0.0.1 31609
10.0.0.1 31607
10.0.0.1 31605
10.0.0.1 31587
10.0.0.1 31551
10.0.0.1 31549
10.0.0.1 31535
10.0.0.1 31533
10.0.0.1 31521
10.0.0.2 38693
montor 中输出的 客户端ip 及 客户端连接时使用端口.
3.通过客户端连接和端口找到具体的进程.
从上面的日志能看出 10.0.0.2
这台机器只有一个单端口 访问. 查看服务器IP 是其他服务的机器.
$ sudo lsof -i :38693
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php 10963 root 71u IPv4 84827196 0t0 TCP test-service-1.internal:38693->172.0.0.1:6379 (ESTABLISHED)
上面已经给到了进程名称 和 进程ID
$ ps -ef |grep -i 10963
root 10963 10939 0 Apr28 ? 00:01:09 test-swoole-worker-18
root 14254 14111 0 09:43 pts/1 00:00:00 grep --color=auto -i 10963