VisualVM/JConsole genom ssh SOCKS tunnel

Om man vill använda JConsole eller VisualVM för att övervaka en JVM som ligger på en dator som man inte har tillgång till från sin egna dator utan endast via en annan dator som man i sin tur har ssh access till, så kan man sätta upp en lokal SOCKS tunnel som man kör genom mot den remota ssh servern. Nu när jag skall beskriva hur man går tillväga så kallar jag datorn som jag har ssh tillgång till för ssh-servern och datorn där jag vill övervaka JVM för jvm-servern.

  1. Starta Putty och fyll i hostname:

  2. Öppna Tunnels under Connection->SSH i Category trädet och fyll i en godtycklig Source port och klicka i Dynamic

  3. Klicka på Add och sen Open, nu är SOCKS tunneln öppen och lyssnar på porten som jag satte tidigare (10000).

  4. Nu kan jag ansluta JConsole till jvm-servern med följande kommando
    jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=10000 jvm-servern:<jmx-port>

  5. Jag kan även ansluta VisualVM som kommer med jdk 1.6 till jvm-servern om jag startar VisualVM med följande kommando
    jvisualvm -J-Dnetbeans.system_socks_proxy=localhost:10000 -J-Djava.net.useSystemProxies=true

  6. Med den senaste versionen av VisualVM (2.1) så gör man på följande sätt. Starta VisualVM och öppna Tools->Options, klicka på Network och fyll i proxy inställningarna:

  7. Nu är det bara att skapa en remote host till jvm-servern och lägga till en JMX Connection.