I hope my below answers are all correct, but most should be.
Am 28.03.2018 um 20:25 schrieb Greg Kaszycki:
Tomcat version 7.0.82
I have some questions about tomcat monitoring and jmx. The short version
is that I am trying to get session information about users logged into my
app.
I see documentation about different ways to get to the jmx beans but I
don't understand the relationship between them.
http://localhost:8080/ takes me to the tomcat homepage and I can click on
the manager button and get to a page with some links to application folders
(I've set my role). Do they use jmx beans?
No.
I can also do like: http://localhost:8080/manager/text/sessions?path=/.
and it returns number of sessions. Is that accessing an mbean? How does
that name relate to the folders under the tomcat manager folder?
No access to mbeans. No relation to folders. URIs can either point to
static content, JSPs or to servlets( code) that dynamically enerate the
responses. Your example points to a servlet, so no relation with
folders. How does Tomcat know, which URI relates to which servlet?
That's described in the servlet specification (standards document) and
one way is declaring servlets and their mapping path in the config file
WEB-INF/web.xml inside the webapp.
I can also access
http://localhost:8080/manager/jmxproxy/?get=java.lang.type=Memory&att=HeapMemoryUsage
and get memory usage stats. Is that accessing an mbean?
Yes. The same web.xml file mapps the URI /jmxproxy underneath the
manager webapp to the so called JMXProxy servlet. That servlet typically
produces all it's responses from data retrieved internally from MBeans.
In the above case you are retrieving the attribute named HeapMemoryUsage
form an MBean named java.lang.type=Memory (I think it should be:
java.lang:type=Memory).
I also don't see how these names relates to going to jconsole and looking
at the mbean tab and accessing Catalina/Manager/examples/localhost. The
names of the attributes in jconsole don't seem to match the names of the
beans that I can access like the memory example above.
They should without your typo. In jconsole you should find a MBean group
named java.lang and if you open that patr of the MBean tree, you will
finde the Memory-MBean there. You other path
"Catalina/Manager/examples/localhost" seems to be totally unrelated (or
I have not fully understood your question).
I found that memory example above online, but where are these beans
documented? The documentation in
Some of the MBeans - for example the Memory MBean - are part of any Java
process, not just Tomcat. So expect them to be documented in generic
Java docs. Since not only Tomcat, but also applications can create their
own additional MBean, these basic Java MBeans that always exist are also
called "platform mbeans". The first hit in a search engine points to
https://docs.oracle.com/javase/7/docs/technotes/guides/management/mxbeans.html
which starts describing how to access mbeans for developers, but in the
second part of the document also introduces to the data contained in
some of the platform MBeans. In addition to docs, it is always very
instructive to simply use a tool like JConsole (or more modern
JVisualVM) to click through the MBean tree and observe what's there.
Start with an easy setup, where you run Tomcat and these GUI tools on
the same machine.
The Tomcat specific MBeans are listen in
https://tomcat.apache.org/tomcat-9.0-doc/funcspecs/mbean-names.html, but
I don't know how current that document is. It also gives no hints, what
data is actually contained in those MBeans. Most of the MBean attributes
have very descriptive names, so again browsing through the tree helps a bit.
https://tomcat.apache.org/tomcat-7.0-doc/monitoring.html said I could also
access it through a url like:
service:jmx:rmi:///jndi/rmi://localhost:8081/jmxrmi but I could not get
that to work. Would that access the same bean(s) as the other examples?
I would start interactively with JConsole or JVisualVM to get an idea
what's there. You can also get a full textual dump with
https://tomcat.apache.org/tomcat-9.0-doc/funcspecs/mbean-names.html?qry=*:*
That command and some more is explained e.g. in
https://tomcat.apache.org/tomcat-9.0-doc/manager-howto.html
Then you need to decide, via which network protocol you want to access
MBean data remotely. You could either use an agent deployed as a webapp
inside Tomcat, speak http(s) to Tomcat and the agent retrieves the data
internally via JVM and returns a textual representation. The manager
webapp JMXProxy servlet is one such agent, but it has some deficiencies.
You could also look at Jolokia (Open Source), which provides a more
powerful other such agent.
Alternatively you can also use JMX as a remote network protocol, but
that is a bit more subtle to configure and get it secure etc. Your
mentioned not-working URL fits into this realm. As I said, that's the
harder way and you need a client, that speaks the right protocol over
that URI.
If you need something more complete, people here mention Moskito
(https://www.moskito.org/) or Java Melody
(https://github.com/javamelody/javamelody/wiki) and a few other solutions.
I can set CATALINA_OPTS to do the jmxremote enabling as described in , but
what exactly is that enabling? Is that what enabled the mbeans that I
accessed?
No, it would enable remote access to these MBeans using the JMX protocol
which itself is based on the RMI protocol.
Lastly, I created a listener (implements HttpSessionListener) and
configured it in web.xml but when I set a breaklpoint in IDEA, it never hit
it. When exactly does a session get created? when someone goes to any
page on the host? When they log into the app?
Maybe start with a tutorial on servlet sessions. The first search
machine hit
https://www.tutorialspoint.com/servlets/servlets-session-tracking.htm
already doesn't look too bad.
Regards,
Rainer
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org