我正在尝试使用 JMX API 来获取 Web 应用程序的活动会话计数。
- 是否可以使用 JMX API 来获取此类信息?
- 如果是,它有多可靠?
- 有关如何完成此操作的任何示例代码?
我一直在阅读 JMX 教程和文档,但它们让我了解了这项技术是什么。我只是无法确定我需要什么。
我正在尝试使用 JMX API 来获取 Web 应用程序的活动会话计数。
我一直在阅读 JMX 教程和文档,但它们让我了解了这项技术是什么。我只是无法确定我需要什么。
将应用服务器配置为公开 JMX 端口后,您可以使用 JConsole 或 JVisualVM 之类的工具来完成此操作。您没有提及您使用的是哪个应用服务器,但对于 Tomcat,它在此处进行了描述:http: //tomcat.apache.org/tomcat-5.5-doc/monitoring.html。与 JConsole 连接后,Tomcat 会公开一个具有会话信息的 MBean,但它再次取决于您使用的容器。
ObjectName name = new ObjectName("Catalina:type=Manager,path=/NAME_OF_APP,host=localhost");
ManagementFactory.getPlatformMBeanServer().getAttribute(name, "activeSessions");
要跟踪会话,您可以使用HttpSessionListener。如果您想通过 JMX 公开活动会话,您可以注册一个 mbean 并从其他应用程序调用它(请参阅 JMX 文档)。
JBoss 已经通过 JMX 公开了活动会话计数,但仅在整个服务器上,而不是每个 webapp。如果您只使用一个 web 应用程序,那么这对您来说应该没问题。
转到端口 8080 上的 JMX 控制台,并查找名为host=localhost,path=/,type=Manager
. 在里面你会找到一个活动会话计数的条目。
skaffman 给出的答案非常有帮助,但我会修改 JBoss 能够通过查找以下内容为您提供每个 webapp 的会话:
主机=本地主机,路径=/your_webapp_context,类型=经理
(将 your_webapp_context 替换为您感兴趣的 webapp 的上下文...)