如果要在其RMI注册表的特定端口上启动jstatd
,可以为此传递-p
参数。
但问题是它打开了第二个随机端口(在java中称为“匿名端口”),这会导致编写防火墙规则或使用JVisualVM连接到Docker容器中运行的远程jstatd
时出现问题。
如果您查看jstatd
source,您会看到它正在调用UnicastRemoteObject.exportObject(remoteHost, 0)
,这将打开一个新的“匿名端口”,这似乎是随机的。
有没有办法强制将最后一个端口强制为固定端口,或者预测哪一个端口将被选中?
答案 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"
,2222
和2223
,RMI注册表将在端口2224
上提供。