如何监控c3p0连接

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

  org.hibernate.connection.C3P0ConnectionProvider 

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

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

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

我怎么能问c3p0有多少托管和未使用的连接?

您可以通过JMX监视连接池。 从文档:

通过JMX配置和管理c3p0

如果您的环境中有JMX库和JMX MBeanServer(它们包含在JDK 1.5及更高版本中),则可以通过JMX管理工具(例如jconsole,与jdk 1.5捆绑在一起)检查和配置c3p0数据源。 您会发现c3p0在com.mchange.v2.c3p0下注册了MBean,其中一个包含有关整个库的统计信息(称为C3P0Registry ),以及您部署的每个PooledDataSource的MBean。 您可以查看和修改DataSource的配置属性,跟踪Connection,Statement和Thread池的活动,以及通过PooledDataSource MBean重置池和DataSource。 (您可能希望查看PooledDataSource的API文档以PooledDataSource可用操作的文档。)

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

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

  1. 从谷歌代码下载JMXQuery。 您需要查看修订版18。

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

  2. 下载此补丁。 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代码获得,就像正常一样。使用此链接 )

    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