9999 是什么
9999 是一个没有唯一归属的高号端口:分布式任务调度平台 xxl-job 的执行器默认监听它,数据库中间件 Pgpool-II 的默认服务端口也是它。这类「谁都在用」的端口在排查上有个特点——看到端口号说明不了任何问题,必须先认进程,才能判断是哪套系统在占用。
基本信息
| 常见归属 | xxl-job 执行器 / Pgpool-II 连接池 |
|---|---|
| 端口/协议 | TCP,9999 |
| xxl-job 日志 | 常见路径 /data/applogs/xxl-job/ |
| Pgpool 配置 | pgpool.conf 中的 port 参数 |
| 安全等级 | 仅内网,不应对外开放 |
典型使用场景
- 任务调度排障:执行器注册不上调度中心时先确认 9999 是否在监听
- 数据库中间件巡检:确认 Pgpool-II 是否正常提供服务端口
- 端口冲突排查:同一台主机部署多套系统时识别谁抢到了 9999
- 容器化改造:容器端口映射后宿主机端口冲突引发的启动失败
- 安全核查:确认 9999 只在内网可达,未暴露到公网
占用排查
占用排查
ss -lntp | grep 9999 # 谁在监听 9999
sudo lsof -i :9999 # 反查进程与可执行文件
ss -ntp | grep 9999 # 看已建立连接与对端,判断是调度还是数据库流量
ps -ef | grep -E 'xxl-job|pgpool' | grep -v grep # 按进程名核对归属
netstat -ano | findstr 9999 # Windows 侧对照两类服务的区分方法
| 线索 | xxl-job 执行器 | Pgpool-II |
|---|---|---|
| 进程名 | Java 进程,常带 xxl-job 相关参数 | pgpool 进程 |
| 对端地址 | 调度中心地址 | 数据库客户端与后端 PostgreSQL |
| 日志位置 | /data/applogs/xxl-job/ 等应用日志目录 | Pgpool 日志与 /var/log 下相关文件 |
| 配置入口 | 执行器配置或启动参数中的端口项 | pgpool.conf 的 port 参数 |
同一台机器上两套系统都用 9999 时,后启动的服务往往直接启动失败;如果启动脚本没有做端口占用检查,故障会表现为「任务偶发派单丢失」或「数据库连接偶发失败」,而不是明确的报错,排查成本很高。
上线前先在目标主机上确认端口占用情况,并把它写进部署清单;容器化环境还要区分容器内端口与宿主机映射端口,两者的冲突面并不相同。
台账里不要只登记「9999 开放」,而要写清是哪个业务、哪个组件、由谁负责。这个端口在真实环境里的归属高度分散,只有业务归属才是可核查的结论。