On Thu, Dec 12, 2019 at 10:05 AM Christopher Schultz <ch...@christopherschultz.net> wrote: > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA256 > > Chris, > > On 12/11/19 15:52, Chris Cheshire wrote: > > On Wed, Dec 11, 2019 at 12:24 PM Christopher Schultz > > <ch...@christopherschultz.net> wrote: > >> > >> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 > >> > >> > >> > >> On 12/10/19 12:59, Chris Cheshire wrote: > >>> On Tue, Dec 10, 2019 at 11:58 AM Chris Cheshire > >>> <yahoono...@gmail.com> wrote: > >>>> > >>>> On Tue, Dec 10, 2019 at 9:42 AM Christopher Schultz > >>>> <ch...@christopherschultz.net> wrote: > >>>>> > >>>>> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 > >>>>> > >>>>> Chris, > >>>>> > >>>>> On 12/9/19 17:10, Chris Cheshire wrote: > >>>>>> In CATALINA_BASE/bin/setenv.sh I have the following : > >>>>>> > >>>>>> CATALINA_OPTS="-Dcom.sun.management.jmxremote > >>>>>> -Dcom.sun.management.jmxremote.ssl=false > >>>>>> -Dcom.sun.management.jmxremote.authenticate=false" > >>>>> > >>>>> Okay. > >>>>> > >>>>>> In CATALINA_BASE/conf/server.xml I have a listener > >>>>>> configured : > >>>>>> > >>>>>> <Listener > >>>>>> className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" > >>>>>> > >>>>>> > >> > >>>>>> > rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" > >>>>>> useLocalPorts="true" /> > >>>>>> > >>>>>> > >>>>>> Upon startup I see in logs : INFO [main] > >>>>>> org.apache.catalina.mbeans.JmxRemoteLifecycleListener.createServe > r > >>>>>> > >>>>>> > >> > >>>>>> > The JMX Remote Listener has configured the registry on port > >>>>>> [10001] and the server on port [10002] for the > >>>>>> [Platform] server > >>>>>> > >>>>>> > >>>>>> $ netstat -an | grep 10001 tcp4 0 0 > >>>>>> 127.0.0.1.10001 *.* LISTEN tcp6 > >>>>>> 0 0 ::1.10001 *.* LISTEN > >>>>>> > >>>>>> On my local machine I have a tunnel set up as follows : > >>>>>> ssh -N -L10001:localhost:10001 -L10002:localhost:10002 > >>>>>> user@remotehost > >>>>>> > >>>>>> (where user is the user tomcat is running under) > >>>>>> > >>>>>> When I try to add a remote JMX connection in VisualVM on > >>>>>> my client machine to localhost:10001 I get an error > >>>>>> dialog after a brief delay with the message "Cannot > >>>>>> connect to localhost:10001 using > >>>>>> service:jmx:rmi:///jndi/rmi://localhost:10001/jmxrmi". If > >>>>>> I change it to port 10002 I get the same error. On the > >>>>>> server at this time : $ netstat -an | grep 10001 tcp4 > >>>>>> 0 0 127.0.0.1.10001 *.* LISTEN > >>>>>> tcp6 0 0 ::1.10001 *.* LISTEN > >>>>>> tcp4 0 0 127.0.0.1.62637 127.0.0.1.10001 > >>>>>> TIME_WAIT > >>>>>> > >>>>>> > >>>>>> If I try to use jconsole connecting to port 10001 I get > >>>>>> the error "Connection failed: non-JRMP server at remote > >>>>>> endpoint". Connecting to port 10002 I get the error > >>>>>> "Connection failed: no such object in table" > >>>>> > >>>>> You should be using the port defined by > >>>>> rmiRegistryPortPlatform, so 10001 is the correct port to > >>>>> use. > >>>>> > >>>>>> I've been through the tomcat configuration documentation > >>>>>> a couple times but I can't see what else I need to > >>>>>> configure. > >>>>> > >>>>> What you have looks good to me without reproducing it > >>>>> myself. Can you do : > >>>>> > >>>>> $ netstat -an | grep 1000[0-9] > >>>>> > >>>>> ? > >>>>> > >>>>> Just to be sure about both ports? > >>>>> > >>>> > >>>> $ netstat -an | grep 1000[0-9] tcp6 0 0 :::10001 > >>>> :::* LISTEN tcp6 0 0 :::10002 > >>>> :::* LISTEN > >>>> > >>>> > >>>> Hmmmm. Tomcat is only listening on ipv6 ports, but my tunnel > >>>> is using ipv4. After digging around [1], I added this to > >>>> CATALINA_OPTS in setenv.sh > >>>> > >>>> -Djava.net.preferIPv4Stack=true > >>>> -Djava.net.preferIPv4Addresses=true > >>>> > >>>> $ netstat -an | grep 1000[0-9] tcp 0 0 > >>>> 0.0.0.0:10001 0.0.0.0:* LISTEN tcp 0 > >>>> 0 0.0.0.0:10002 0.0.0.0:* LISTEN > >>>> > >>>> When I try to connect with jconsole I get the same error > >>>> (non-JRMP server at remote endpoint), with the server > >>>> showing > >>>> > >>>> tcp 0 0 0.0.0.0:10001 0.0.0.0:* LISTEN > >>>> tcp 0 0 0.0.0.0:10002 0.0.0.0:* LISTEN > >>>> tcp 0 0 127.0.0.1:10001 127.0.0.1:43803 > >>>> TIME_WAIT tcp 0 0 127.0.0.1:10001 > >>>> 127.0.0.1:43815 TIME_WAIT > >>>> > >>>> > >>>> I have also updated sshd_config with > >>>> > >>>> PermitTunnel yes > >>>> > >>>> and restarted that. Still no change. > >>>> > >>>> Chris > >>>> > >>>> > >>>> [1] > >>>> https://serverfault.com/questions/390840/how-does-one-get-tomcat-to > - -b > >> > >>>> > ind-to-ipv4-address > >>> > >>>> > >>> > >>> As a followup to take the tunnel out of the equation I > >>> downloaded jmxterm [1] on the server and tried to connect > >>> > >>> > >>> $ java -jar jmxterm-1.0.0-uber.jar Welcome to JMX terminal. > >>> Type "help" for available commands. $>open localhost:10001 > >>> #RuntimeIOException: Runtime IO exception: Failed to retrieve > >>> RMIServer stub: javax.naming.CommunicationException [Root > >>> exception is java.rmi.ConnectIOException: non-JRMP server at > >>> remote endpoint] $> > >>> > >>> > >>> Back to the tomcat documentation, I added this to > >>> CATALINA_OPTS (based on listener config and assumed defaults) > >>> > >>> -Dcom.sun.management.jmxremote.registry.ssl=false > >>> > >>> and now I get a different error : $>open localhost:10001 > >>> #RuntimeIOException: Runtime IO exception: Failed to retrieve > >>> RMIServer stub: javax.naming.CommunicationException [Root > >>> exception is java.rmi.UnmarshalException: error unmarshalling > >>> return; nested exception is: java.lang.ClassNotFoundException: > >>> org/apache/catalina/mbeans/JmxRemoteLifecycleListener$RmiClientLocal > ho > >> > >>> > stSocketFactory > >>> > >>> > >> (no security manager: RMI class loader disabled)] > >>> > >>> > >>> So I enabled the security manager by adding to CATALINA_OPTS > >>> > >>> -Djava.security.manager > >>> -Djava.security.policy=$CATALINA_BASE/conf/catalina.policy > >>> > >>> And got a reminder why I turned it off in the first place. Now > >>> I have to figure out how to allow the mysql drivers to work > >>> (and probably everything else about the web app) so tomcat will > >>> start :/ > >>> > >>> Uggh. > >>> > >>> Chris > >> > >> There's always the JMXProxyServlet. > >> > >> JMX is such an ugly protocol. Why not use HTTP(S) which is much > >> easier to configure and connect to? It also means you don't need > >> a Java client :) > >> > >> - -chris > > > > I went this route because I thought it would be the quickest way > > to start poking around within the exposed mbeans without writing > > code to query them myself. > > > > So if tomcat is not jconsole/visualvm compatible, how do I access > > the exposed JMX mbeans? > > Oh, Tomcat most definitely is jconsole/visualvm compatible. I can > connect without any problems on any local environment. I've never > bothered to set it up remotely, because frankly Java clients are too > wasteful IMO to deploy. I use Perl and/or Python-based clients which > query the JMXProxyServlet. > > Have a look at > http://tomcat.apache.org/presentations.html#latest-monitoring-with-jmx > to see how you cann use the JMXProxyServlet with ... any client you'd > like. There are examples using curl in that presentation. > > You can also have a look at: > https://github.com/ChristopherSchultz/check-jmxproxy > or: > https://github.com/ChristopherSchultz/apache-tomcat-stuff/tree/master/bi > n/nagios > > (I have forgotten which of those is more up-to-date... looks like the > latest commit was on the latter.) > > - -chris
Thanks Chris, I'll look into this later. I definitely don't want to run jconsole/visualvm on the server because of the memory/cpu pressure it would add, which was why I was looking to run it on my end over a tunnel. I did take a look at your slides initially but wanted a quick entry into browsing through the mbeans rather than writing some scripts to do it. That said, your approach is far more manageable for ongoing maintenance/monitoring so I'll take another look at this soon. Chris --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org