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

时间:2016-10-27 15:17:20

标签: java performance rmi jstatd

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

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

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

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

1 个答案:

答案 0 :(得分:1)

I found no easy way to predict which concrete port will be opened by using an anonymous port.

But I found a rewrite of jstatd called " jakestatd“这将强制3个端口(因为最后,我发现jstatd实际上打开了3个端口而不是2个({1}}使用。

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

jstatd

此处将打开的3个端口为mvn exec:java -Dexec.args="-pr 2222 -ph 2223 -pv 2224" 22222223,RMI注册表将在端口2224上提供。