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

Reply via email to