1098 与 Java RMI 激活
1098 的登记名是 rmiactivation,对应 Java RMI 的激活守护进程 rmid。RMI(远程方法调用)让 Java 程序像调用本地对象一样调用另一台 JVM 上的对象;激活机制更进一步,允许对象在真正被使用时才创建,由 rmid 负责按需启动已注册的对象。EJB 容器与早期 JMX 部署会用到它。由于实现复杂、收益有限,激活机制先被标记为废弃(JEP 385,JDK 15),随后在 JDK 17 中被移除(JEP 407),因此这个端口如今主要出现在老资产中。
基本信息
| 服务名 | Java RMI Activation(rmid) |
|---|---|
| 传输层 | TCP |
| 登记 | IANA rmiactivation 1098 |
| 关联端口 | rmiregistry 1099,对象通信常用随机端口 |
| 现状 | 机制废弃,JDK 17 已移除(JEP 407) |
典型使用场景
- 老 Java 系统排障:调用远程对象失败时区分是注册表问题还是对象激活问题
- 资产盘点:确认还有哪些主机在跑 rmid 与 rmiregistry
- 升级评估:目标 JDK 为 17 及以上时,激活机制相关应用必须改造
- 安全评估:RMI 的序列化机制存在历史风险,需评估暴露范围
- 变更核实:防火墙策略调整后确认注册与对象通信两条链路都通
进程与监听核查
进程与监听核查
ss -lntp | grep -E ':(1098|1099) ' # 同时看激活守护与命名注册表
getent services rmiactivation # 名称登记查询
jps -l 2>/dev/null | grep -i rmid # 有 JDK 时核对 rmid 进程是否存在
sudo lsof -i :1098 # 占用进程与路径
# 注意:导出对象时会另开随机端口,只放行 1098/1099 可能仍然调用失败Java RMI 端口对照
| 端口 | 组件 | 说明 |
|---|---|---|
| 1099 | rmiregistry | RMI 命名注册表 |
| 1098 | rmid | 按需激活守护(本条目) |
| 随机端口 | 导出对象通信 | 实际数据通道,需另行规划策略 |
RMI 的注册端口与对象实际通信端口往往不同:对象导出时会另开随机端口,所以注册表可达不代表调用能成功。处置老系统时用 jps 与 ss 组合确认进程与监听的对应关系,比反复重启应用有效得多。
RMI 依赖 Java 序列化传输对象,历史上多次出现反序列化漏洞,且默认不提供加密与强认证。将 RMI 端口暴露到不可信网络属于高风险配置,应限制来源并尽快升级 JDK 与依赖库。