Hi Mark,

Got it working per your instructions.

Many thanks as now I don't need to hassle with custom RMI code or try to 
get nakamura to use JMXMP which was looking quite difficult as I 
couldn't find any docs on the apache.aries MBean bundle and the docs for 
configuring Jetty only apply to a standalone Jetty.

So thanks again, was a great feeling to see it attach to the remote 
nakamura after a day of thrashing.

John K

On 6/5/12 2:00 PM, Mark Triggs wrote:
> Hi John,
>
> I wondered if using an SSH SOCKS proxy might do the job.  Something like
> this works on my local network with some local firewall rules blocking
> all TCP packets but the SSH ones to my server:
>
> On the server running the JVM, start up jstatd as normal:
>
>    $ sudo su -
>
>    # cat>  jstatd.all.policy<<EOF
>    grant codebase "file:${java.home}/../lib/tools.jar" {
>      permission java.security.AllPermission;
>    };
>    EOF
>
>    # jstatd -J-Djava.security.policy=$PWD/jstatd.all.policy 
> -J-Djava.rmi.server.logCalls=true
>
>
> Then on the client you'll be running VisualVM from, open an SSH SOCKS
> proxy:
>
>    $ ssh -N -D 1080 server.example.com
>
> Leave that running in one window, then start VisualVM in another with
> some tricky switches for using the SOCKS proxy
> (nicked from http://labs.skiinfo.com/?p=77):
>
>    $ jvisualvm -J-Dnetbeans.system_socks_proxy=localhost:1080 
> -J-Djava.net.useSystemProxies=true
>
> With those switches, I was able to "Add remote host" through VisualVM
> and connect to the JVMs running on my server.
>
> Cheers,
>
> Mark
>
>
> John King<jo...@media.berkeley.edu>  writes:
>
>> Folks,
>>
>> As part of our ongoing performance testing here at Berkeley, we want
>> to use the VisualVM Java profiler to watch the app, which is running
>> remotely behind a firewall, while running load tests.  We have run
>> into a fundamental problem doing this and I am writing to the list to
>> ask if anyone has solved this particular problem in a simple, easily
>> configurable manner.
>>
>> The problem is that we are being hindered by the nature of JMX
>> (management beans) communication over RMI - the default protocol.
>> The difficulty is that this protocol uses two ports, one defined by
>> server configuration and a second port randomly assigned at runtime.
>> Obviously the second port presents a problem in configuring  a
>> firewall or SSH tunnel as the second port will change when the app is
>> restarted.
>>
>> Our Ops Engineer, Jon Felder, and I have been researching solutions to
>> this problem and have found some possible approaches. - see [1] and
>> [2]
>>
>> [1] recommends using an alternative communications protocol, JMXMP,
>> which is JMX over TCP instead of  RMI.  As this appears to be the
>> simplest solution, I am going to try this out today and will let the
>> list know if it works.
>> [2] involves a fair amount of custom coding based on adapting the
>> example shown.
>>
>> A third approach involves parsing the response from the initial
>> handshake for the randomly assigned port and configuring the SSH
>> tunnel to use or opening that port in the firewall Jon Felder has made
>> good progress on doin this but, as mentioned above, it will be
>> unwieldy.
>>
>> Has anyone on the list solved this particular problem?  Any
>> suggestions as to the easiest solution will be much appreciated.
>>
>> [1] http://blog.markfeeney.com/2010/10/jmx-through-ssh-tunnel.html
>> [2]
>> https://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx


-- 
John King
Applications Programmer
Learning Systems Group
Educational Technology Services
9 Dwinelle Hall - Mail
117 Dwinelle Hall - Office
University of California
Berkeley, CA 94720-2535
Phone: 510-529-5074
Email: jo...@media.berkeley.edu


_______________________________________________
oae-dev mailing list
oae-dev@collab.sakaiproject.org
http://collab.sakaiproject.org/mailman/listinfo/oae-dev

Reply via email to