如何强制或预测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 个端口将是 2222
、2223
和 2224
,RMI 注册表将在端口 2222
可用。
如果您想在特定端口上启动 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 个端口将是 2222
、2223
和 2224
,RMI 注册表将在端口 2222
可用。