监控jboss4.2.3的连接池

来源:互联网 发布:国企年假 知乎 编辑:程序博客网 时间:2024/06/05 15:21

<%@ page contentType="text/html; charset=GB2312"%>
<%@page import="java.sql.*,java.util.*"%>

<%@ page
 import="javax.sql.DataSource,javax.naming.InitialContext,java.sql.*"%>
<%@ page
 import="javax.management.ObjectName,javax.naming.InitialContext,org.jboss.jmx.adaptor.rmi.RMIAdaptor"%>

<%
//
//用来监控jboss连接池,可以查看那些操作没有关闭链接;
//使用的时候需要修改数据源的名称<jndi-name>DefaultDS</jndi-name>
//如果InUseConnectionCount大于0,说明有连接正在使用,如果经过一段时间还是大于0,
//那么程序中可能有链接没有关闭。
//也可以通过jboss的jmx-console来监控!
//http://localhost:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.jca%3Aservice%3DManagedConnectionPool%2Cname%3DeBuilder
  
 try {
  //        Get RMIAdaptor Object
  out.println(new java.util.Date().toString()+"<br>");
  Properties pro = new Properties();
  pro.setProperty("java.naming.factory.initial",
    "org.jnp.interfaces.NamingContextFactory");
  pro.setProperty("java.naming.provider.url",
    "jnp://localhost:1099");
  pro.setProperty("java.naming.factory.url.pkgs",
    "org.jboss.naming:org.jnp.interfaces");
  InitialContext ic = new InitialContext(pro);
  RMIAdaptor server = (RMIAdaptor) ic
    .lookup("jmx/rmi/RMIAdaptor");

  ObjectName name = new ObjectName(
    "jboss.jca:name=DefaultDS,service=ManagedConnectionPool");
  ObjectName lname = new ObjectName(
    "jboss.jca:name=DefaultDS,service=LocalTxCM");

  String AvailableConnectionCount = server.getAttribute(name,
    "AvailableConnectionCount").toString();
  out.println("===========AvailableConnectionCount============"
    + AvailableConnectionCount + "<br>");

  String InUseConnectionCount = server.getAttribute(name,
    "InUseConnectionCount").toString();
  out.println("===========InUseConnectionCount============"
    + InUseConnectionCount + "<br>");

  String ConnectionCreatedCount = server.getAttribute(name,
    "ConnectionCreatedCount").toString();
  out.println("===========ConnectionCreatedCount============"
    + ConnectionCreatedCount + "<br>");

  String ConnectionDestroyedCount = server.getAttribute(name,
    "ConnectionDestroyedCount").toString();
  out.println("===========ConnectionDestroyedCount============"
    + ConnectionDestroyedCount + "<br>");

  String MaxConnectionsInUseCount = server.getAttribute(name,
    "MaxConnectionsInUseCount").toString();
  out.println("===========MaxConnectionsInUseCount ============"
    + MaxConnectionsInUseCount + "<br>");

  String MaxSize = server.getAttribute(name, "MaxSize")
    .toString();
  out.println("===========MaxSize ============" + MaxSize
    + "<br>");


 } catch (Exception ex) {
  out.println("ERROR:" + ex.getMessage());
  ex.printStackTrace();
 }
 
%>
<pre>
// 名词解释:
// BlockingTimeoutMillis :抛出异常前最大的等待连接时间
//
// IdleTimeoutMinutes :关闭连接前连接空闲的最大时间。即连接创建后由该项目规定的时间内未使用则释放连接,
// 即系统创建的连接!
//
// InUseConnectionCount 表示表示用户正在使用的连接!
//
// ConnectionCount 这个项目代表在服务开启后,总共使用的连接数!
//
//  ConnectionCreatedCount 表示jboss应用服务器自己创建的连接! 
//
// ConnectionDestroyedCount 表示jboss释放的连接,包括用户释放的和系统自己释放的!
// 
// IdleTimeoutMinutes 表示闲置释放时间,即连接创建后由该项目规定的时间内未使用则释放连接,即系统创建的连接!
//
//  InUseConnectionCount 表示表示用户正在使用的连接!
//
// MaxConnectionsInUseCount 表示用户正在使用连接的峰值!
//
// 其中InUseConnectionCount越少越好! ConnectionCreatedCount 越大越好! 这两项是关键!!
// 
// AvailableConnectionCount为可用的连接数! 如果你的页面刷新AvailableConnectionCount的值没有变得话,说明你的页面创建的连接都关闭了,如果他的值减少了, 那么减少了多少,表示你有多少连接没有释放!!如果有可能的话,最好每个页面都测试一下,是否完全释放!
// 
// 而 MaxConnectionsInUseCount 的值刚好和 AvailableConnectionCount相对应: 前者减少了多少,后者就增加多少!!!
// 
// 而 MaxConnectionsInUseCount + AvailableConnectionCount = MaxSize 它们存在着这种关系!!
// 
// 可以这样说InUseConnectionCount 就是未释放的连接数!!! 而MaxConnectionsInUseCount 则是未释放连接数的峰值
//
// 在具体应用中可以通过servlet 及定时器实现对连接池的实时监控。
</pre>