2

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

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

如果您查看jstatdsource,您会看到它正在调用UnicastRemoteObject.exportObject(remoteHost, 0)它将打开一个新的“匿名端口”,这似乎是随机的。

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

4

1 回答 1

2

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

但是我发现了一个jstatd名为“ jakestatd ”的重写,它将强制使用 3 个端口(因为最后,我发现jstatd实际上打开了 3 个端口,而不是我最初认为的 2 个)jstatd

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

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

这里将打开 3 个端口222222232224,并且 RMI 注册表将在端口可用2222

于 2016-11-02T16:04:44.440 回答