Question: For some weird reason I am not able to connect using `VisualVM` or `jconsole` to a JMX.

The parameters used to start the VM to be monitored:

```
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=1100

```

I checked, and I can telnet to this port, from both locally and remotely.

Still, VisualVM or jconsole are failing to connect, after spending some considerably time trying to.

```
REMOTE MACHINE with JMX (debian)
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-11M3720)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)

MY WORKSTATION (OS X)
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

```

What is the problem?

Answer: 
These are the steps that worked for me (Debian behind firewall on the server side was reached over VPN from my local Mac):

1. Check server public ip

`ifconfig`
2. Use JVM params:

```
    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=[jmx port]
    -Dcom.sun.management.jmxremote.local.only=false
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Djava.rmi.server.hostname=[server ip from step 1]

```

3. Run application
4. Find process ID of the running java process
5. Check all ports used by JMX/RMI

`netstat -lp | grep [pid from step 4]`
6. Open all ports from step 5 on the firewall

Voila.
If you run `jar` file (via -jar option), you must specifie all other jvm options before `-jar` option!