如何用 ss + ps 精准定位本机 Redis 的“隐形”消费者?

💡 引言 / 背景

在日常运维和服务器安全审计中,我们经常会遇到这样的场景:阿里云等云厂商告警提示"Redis 弱密码/未授权访问",或者我们需要梳理服务器上到底有哪些业务在使用 Redis。

很多人习惯用 ss -tnp | grep :6379 来查找连接,但往往觉得"不准"或"信息太少"。今天,我们就通过一个真实的线上排查案例,演示如何通过网络层命令结合进程分析,精准揪出使用 Redis 的底层业务。

🔍 第一步:从网络层捕获"案发现场"

首先,我们通过 ss 命令查看当前与 Redis (6379端口) 建立的 TCP 连接:

复制代码
ss -tnp | grep :6379

输出结果:

复制代码
ESTAB 0 0 127.0.0.1:6379    127.0.0.1:54700   users:(("redis-server",pid=2872,fd=11))
ESTAB 0 0 127.0.0.1:54700   127.0.0.1:6379    users:(("php",pid=610,fd=4),("php",pid=609,fd=4))

📝 关键信息解读

  • 双向连接 :前两行其实是同一个 TCP 连接的两端。一端是服务端 redis-server (PID 2872),另一端是客户端 php。
  • 多进程共享 Socket :注意客户端显示有两个 PID(610 和 609),且文件描述符(fd)都是 4。这说明这两个 PHP 进程共享了同一个底层 TCP Socket。这是典型的主子进程模型特征(父进程创建连接后 fork 出子进程,子进程继承了 fd)。
  • 纯本地通信 :IP 均为 127.0.0.1,说明是单机内部调用,排除了外部恶意连接的可能。

⚠️ 避坑指南

为什么有时 ss 查不到 Redis 连接?因为 ss -tn 只能抓取执行瞬间处于 ESTAB 状态的 TCP 连接。如果应用使用的是 Unix Domain Socket,或者采用极短的连接池/短连接,就很容易漏掉。因此,网络层抓包只是起点,必须结合进程分析。

🕵️‍♂️ 第二步:顺藤摸瓜,还原业务真身

拿到了可疑的 PHP 进程 PID(609, 610),接下来用 ps 命令查看它们的真实身份:

复制代码
ps -fp 609,610

输出结果:

复制代码
UID   PID  PPID C STIME TTY  TIME       CMD
root  609  1    0 Apr23 ?    00:00:00   WorkerMan: master process start_file=/www/wwwroot/
root  610  609  0 Apr23 ?    04:14:14   WorkerMan: worker process none none

📝 真相大白

  • PID 609 (Master):PPID 为 1,说明它是脱离终端运行的守护进程主节点。启动时间远在几个月前(Apr23)。
  • PID 610 (Worker) :PPID 为 609,证实了我们在 ss 中看到的"父子进程共享 Socket"的猜想。它的 CPU 累计时间长达 4 个多小时,说明这是一个长期驻留内存、持续高频处理任务的进程。
  • 业务定性 :这不是普通的 Web 请求(如 Nginx+PHP-FPM),而是基于 Workerman 框架的常驻内存应用。结合它长期持有 Redis 连接的特征,该业务极大概率是在做消息队列消费(Queue Worker) 、WebSocket 推送服务 或实时数据订阅。

🛠️ 第三步:闭环验证与安全加固

定位到 Workerman 后,排查工作并未结束,还需要完成以下闭环:

  1. 代码级确认 :进入 /www/wwwroot/ 目录,搜索 Workerman 的启动脚本及 Redis 配置,确认其具体业务逻辑(如搜索 new Redis()、subscribe、pop 等关键字)。
  2. 补齐监控盲区 :既然确认了是 Workerman 这种常驻进程,后续监控不应再依赖 ss 瞬时状态,而应检查 Supervisor/Systemd 的托管状态,或在 Redis 中使用 CLIENT LIST 查看长连接的 name 标识。
  3. 安全加固 :针对此类本机长连接业务,强烈建议将 Redis 的 TCP 监听改为 Unix Domain Socket,并通过文件权限控制访问。这不仅能彻底杜绝 SSRF 攻击风险,还能消除云厂商的"弱密码/未授权"告警,同时提升本地 IPC 通信性能。

🎯 总结

排查本机 Redis 使用者,不能仅停留在"谁连了 Redis",更要搞清楚"它用 Redis 做了什么"。

ss -tnp 提供了网络连接与进程 PID 的映射,而 ps -fp 则揭开了进程的架构面纱。当两者结合时,我们就能从冰冷的端口号中,还原出 Workerman 队列消费、缓存读写等真实的业务图景。掌握这套组合拳,无论是应对安全审计还是故障排查,都能做到心中有数、手中有刀。

相关推荐
弦儿5 分钟前
MySQL 数据库从入门到实践:SQL 四大分类 + DDL/DML/DQL 全梳理(附全套代码)
数据库
一个天蝎座的程序猿28 分钟前
金仓KingbaseES的数据集成软件,我用了一年多,把KDTS和KFS的用法还有踩过的坑一次说清
数据库
泡海椒39 分钟前
JQuick-SQL CASE WHEN 与函数:在查询中构建业务字段
数据库·sql
一个天蝎座的程序猿40 分钟前
2TB传感器数据搬迁记:IoTDB数据导入导出实战详解(CSV/SQL/TsFile全踩了一遍)
数据库
charlotte102410241 小时前
Redis 简介:从诞生到数据类型,再到缓存三大问题
数据库·redis·缓存
张张123y1 小时前
2026 Agent 框架怎么选?拆 3 层底层逻辑(运行循环 / 记忆 / 工具协议)+ 一张决策表
linux·ubuntu·microsoft·langgraph·mcp·crewai·agent 框架
ClouGence1 小时前
还在用命令行管理 Kafka?开源 CloudDM 让操作更简单
数据库·kafka·开源
零域行者1 小时前
Linux入门基础命令
linux·服务器·安全·web安全
打工仔折腾 AI1 小时前
Linux 网络编程:从零掌握 TCP Socket 编程与 C++ 实战落地
linux·网络·人工智能·后端·python·tcp/ip·性能优化
硅基手札1 小时前
SPI技术系列 13 · SPI 调试与排查
linux·运维·stm32·单片机·嵌入式硬件·bug