13

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

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

我已经看到 server.log 生成了包含有关连接池的有趣信息的行:

调试 [com.mchange.v2.resourcepool.BasicResourcePool] 跟踪 com.mchange.v2.resourcepool.BasicResourcePool@63f5e4b6 [托管:10,未使用:9,排除:0]

对于我的监控池(我正在使用 nagios),我想提供一个 JSP 来告知正在使用的连接数以及空闲的连接数,如日志文件所述。

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

4

2 回答 2

23

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

通过 JMX 配置和管理 c3p0

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

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

于 2010-11-05T12:43:06.330 回答
2

您可以像这样使用 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. 现在 cd 进入 jmxquery-read-only 文件夹并运行以下命令(假设 apache maven 和 jmxquery 在同一个文件夹中)

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

  6. 然后运行以下命令:

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

  7. 现在您应该已经生成了一个 jmxquery.jar 文件,您可以使用它来查询 c3p0 连接池,如下所示:(可以像往常一样从 google 代码站点下载 jmxquery 代码来获取 check_jmx 文件。使用此链接

    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

于 2013-08-05T18:22:50.563 回答