-----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
-----BEGIN PGP SIGNATURE-----
Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/

iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAl3yVxcACgkQHPApP6U8
pFhqrA/+Ptt/CKlDw66uTJkHW3OPix9Cx5VZw5O9T2zrxZ6JMMpzmLWQTQtgdvFV
+4wWGu2nGjAj3MqIl8j7wF+Scm10YnBLITzfXYA1zUHgWk99/ZvK07t3YZ2y+nT4
Yl02Zc5KJ8dIMkcLwAcwZ8jRL+4uaA48W5zjfHMOaG3LRKU4ONRHO4Qkxc3YQgvu
TPWdUypdO1La1hGV11D2ZiUbf61ybogOFpIbtYMj1Nqm8gGY4HhXMTc2EtwmX+DV
TVO+4SUoTU6ZqNK5QSnmIu9rR91gp6nQ3V9nKA4bV019qVKmHGeVuQtdzIFVMJJO
16BImqh8G4gKckH2gArmKYfzpwGUl8Th+QHueJ5OTbDwS17zvp8jmeuosWIQutux
gqKFPWTeoGtERgO57IT9xfiW92FLUNqzmTiGJZHDpiaQbffZzYsTmz3GQwGft95E
F6/dDRSvHu2ZEd/5WG94+7DpYItkTxBiS77bDKDzPsI1c1UEJhdRcJOnxdODzWNw
G7NQfXria3yCqhmG+Qz2dh3F9CKjHrhUyXcwMgnqyttXeetWyVDZ8Y2v8wG9VF8q
h53eCYw88aOyJntKnQMlZ2OvBzOaXZXiz17YEBrlgH6X2/vsc3uXvmCiUn9byTdm
Xb4WWNWU4/YXnfvYLJweOircgjVCIkqacrjkanq1GkJDzIt1iiU=
=hRok
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to