У меня есть другое решение, использующее стандартное туннелирование SSH и без портов брандмауэра для открытия.
У меня SOCKS прокси не работает.
Запустите JVM с параметрами:
-Dcom.sun.management.jmxremote = истина
-Dcom.sun.management.jmxremote.ssl = ложь
-Dcom.sun.management.jmxremote.authenticate = ложь
-Dcom.sun.management.jmxremote.port = [port1]
-D java.rmi.server.hostname = локальный
-Dcom.sun.management.jmxremote.rmi.port = [port2]
Важной частью является "server.hostname = localhost". Кроме того, вы явно определяете оба порта (connect + "random" RMI port), для "jmxremote.rmi.port" требуется как минимум Java 7 update 4 (я где-то читал, не проверял эту информацию - используйте «lsof -i» серверный компьютер для проверки реально используемых портов).
(Конечно, вы можете использовать аутентификацию или SSL.)
Подключитесь через ssh к серверу и перешлите локальные port1 и port2 на localhost: port1 | 2 и сервер.
В VisualVM откройте JMX-соединение с localhost: port1 (без настройки прокси).