如何监控c3p0连接

时间:2010-11-05 07:24:42

标签: java hibernate c3p0 health-monitoring

我在JBoss战争中使用Hibernate,使用c3p0进行连接池,都在我的类路径中的hibernate.cfg.xml配置文件中配置

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

我见过server.log会生成包含有关连接池的有趣信息的行:

DEBUG [com.mchange.v2.resourcepool.BasicResourcePool] trace com.mchange.v2.resourcepool.BasicResourcePool@63f5e4b6 [managed:10,unused:9,excluded:0]

对于我的监控池(我正在使用nagios)我想提供一个JSP,告诉我们正在使用多少个连接以及有多少个是免费的,就像日志文件所说的那样。

如何询问c3p0有多少托管和未使用的连接?

2 个答案:

答案 0 :(得分:20)

您可以通过JMX监控您的连接池。来自文档:

  

Configuring and Managing c3p0 via JMX

     

如果是JMX库和JMX   您可以使用MBeanServer   环境(它们包含在JDK中   1.5及以上),您可以通过a检查和配置c3p0数据源   JMX管理工具(如   jconsole,与jdk 1.5捆绑在一起)。您   会发现c3p0会注册MBeans   在com.mchange.v2.c3p0下,有一个   关于图书馆的统计数据   整体(称为C3P0Registry),和   每个PooledDataSource你的MBean   部署。您可以查看和修改您的   DataSource的配置属性,   跟踪Connection的活动,   语句和线程池,并重置   池和DataSources通过   PooledDataSource MBean。 (你可以   希望查看API文档   PooledDataSource   可用的文档   操作)。

顺便说一下,似乎有Nagios的JMX插件,你不会被迫使用JSP。

答案 1 :(得分:1)

您可以像这样使用Icinga / Nagios进行监控。

  1. 从谷歌代码下载JMXQuery。您需要查看版本18,如此。

    svn checkout -r 18 http://jmxquery.googlecode.com/svn/trunk/ jmxquery-read-only

  2. 下载此修补程序。 wildcard patch for c3p0

  3. 使用此命令修补源代码:(确保您位于jmxquery-read-only / src / main目录中)

    patch -p0 -i wildcard_patch.diff

  4. 现在下载Apache Maven并使用此命令提取它

    tar -zxvf apache-maven-*-bin.tar.gz

  5. 现在进入jmxquery-read-only文件夹并运行以下命令(假设apache maven和jmxquery在同一个文件夹中)

    ../apache-maven-*/bin/mvn compile

  6. 然后运行以下命令:

    ../apache-maven-3.0.3/bin/mvn package

  7. 现在您应该已经生成了一个jmxquery.jar文件,您可以使用它来查询c3p0连接池,如下所示:( check_jmx文件可以从google代码网站上正常下载jmxquery代码获得。使用this link

    check_jmx -U service:jmx:rmi:///jndi/rmi://localhost:1090/jmxrmi -O com.mchange.v2.c3p0:type=PooledDataSource* -N 1 -A numBusyConnections -w 50 -c 100