Anthony O. Anthony O. - 1 month ago 9
Java Question

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

If you want to start

on a specific port for its RMI registry, you can pass
-p
parameter for this.

But the problem is that it opens a second random port (called "anonymous port" in java) which causes problem for writing firewall rules or to use JVisualVM to connect to a remote
jstatd
running in a Docker container.

If you look at
jstatd
source
, you'll see that it is calling
UnicastRemoteObject.exportObject(remoteHost, 0)
which will open a new "anonymous port" which seems to be random.

Is there a way to force this last port to a fixed one, or a way to predict which one will be chosen?

Answer

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" which will force the 3 ports (because at last, I discovered that jstatd actually opens 3 ports and not 2 as I first thought) that jstatd uses.

As it was not enough for me because I needed to control those ports, I wrote ejstatd that answer this exact question (as well as others), so now I can control thos ports using (inside ejstatd's folder):

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

Here the 3 ports that will be opened will be 2222, 2223 and 2224, and the RMI registry will be available at port 2222.

Comments