如何监视 c3p0 连接

2022-09-04 07:53:19

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

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

我见过服务器.log生成有关连接池的有趣信息的行:

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

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

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


答案 1

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

通过 JMX 配置和管理 c3p0

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

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


答案 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连接池,就像这样:(check_jmx文件可以通过像往常一样从谷歌代码站点下载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


推荐