如何监控c3p0连接

14

我在我的JBoss war中使用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]

我想提供一个JSP页面,告诉我正在使用多少连接和有多少连接是空闲的,就像日志文件所说的那样,以便用于监控池(我正在使用nagios)。

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

2个回答

24
您可以通过JMX监视您的连接池。从文档中可以了解到:

通过JMX配置和管理c3p0

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

顺便说一句,似乎有适用于Nagios的JMX插件,您不必使用JSP。

实际上,但是对于我的方法,我需要将这个值存储在一个变量中。 - Llistes Sugra
@LlistesSugra:使用适合您需求的任何工具。但无论如何,JMX都是获取信息的方法。 - Pascal Thivent
1
标准的check_jmx Nagios插件无法与c3p0一起使用,因为PooledDataSource的名称附加了一个唯一的字符串。这就是为什么您需要我在下面提到的jmxquery.jar(它支持通配符)。 - d4v3y0rk

2
你可以像这样使用Icinga/Nagios进行监控。
  1. 从google code下载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 code网站下载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


通配符补丁似乎已经丢失,我看到0.9.5.1版本提供了一种通过排除标识令牌来获取指标的方法。详情请见:http://www.mchange.com/projects/c3p0/#jmx_configuration_and_managementcom.mchange.v2.c3p0.management.ExcludeIdentityToken=true - kisna
wildcard patch for c3p0 的原始链接主机名(jmxquery.googlecode.com)似乎已更改或移动到 code.google.com/p/jmxquery,且最新版本源代码(1.3)无法下载。 - Jdamian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接