如何强制或预测jstatd的第二个开放端口?

How to force or predict the second open port of jstatd?

如果您想在特定端口上启动 jstatd 用于其 RMI 注册表,您可以为此传递 -p 参数。

但问题是它会打开第二个随机端口(在 java 中称为 "anonymous port"),这会导致编写防火墙规则或使用 JVisualVM 连接到远程服务器时出现问题 jstatd 运行 在 Docker 容器中。

如果您查看 jstatd source, you'll see that it is calling UnicastRemoteObject.exportObject(remoteHost, 0),它将打开一个似乎是随机的新 "anonymous port"。

有没有办法将最后一个端口强制为固定端口,或者有办法预测将选择哪个端口?

我发现没有简单的方法来预测使用匿名端口将打开哪个具体端口。

但我发现 jstatd 的重写称为“jakestatd”,它将强制打开 3 个端口(因为最后,我发现 jstatd 实际上打开了 3 个端口而不是 2 个正如我首先想到的那样)jstatd 使用。

因为这对我来说还不够,因为我需要控制这些端口,所以我写了 ejstatd 来回答这个确切的问题(以及其他问题),所以现在我可以使用(在 ejstatd 中)控制这些端口文件夹):

mvn exec:java -Dexec.args="-pr 2222 -ph 2223 -pv 2224"

此处将打开的 3 个端口将是 222222232224,RMI 注册表将在端口 2222 可用。