监控jboss4.2.3的连接池

<%@ 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>

你可能感兴趣的:(sql,应用服务器,jboss,SQL Server,servlet)