2 yueyakk yueyakk 于 2015.06.05 14:39 提问

使用proxool连接池,cpu占用率很高

给别人用springmvc 做的一个网站,数据库用的proxool配的连接池,服务器用的tomcat。但是启动后cpu占用率一下就上去了,阿里云的服务器,单核,2G内存,windows 2012

我用visualvm查看运行情况
![图片说明](https://img-ask.csdn.net/upload/201506/05/1433486315_435141.png)图片说明

 <?xml version="1.0" encoding="UTF-8"?> 
<something-else-entirely>
    <proxool>
        <alias>mysql</alias>
        <driver-url>jdbc:mysql://127.0.0.1:3306/lingshang1?rewriteBatchedStatements=true&amp;useUnicode=true&amp;characterEncoding=UTF-8</driver-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <driver-properties>
            <property name="user" value="root" />
            <property name="password" value="root" />
        </driver-properties> 
    <house-keeping-sleep-time>90000</house-keeping-sleep-time> 
    <prototype-count>5</prototype-count> 
    <maximum-connection-count>50</maximum-connection-count> 
    <minimum-connection-count>5</minimum-connection-count>
    </proxool>
</something-else-entirely> 

3个回答

yanganfu2013
yanganfu2013   2015.06.05 15:27

建议你去检查下mysql本身的配置.很多时候是由于mysql本身的配置,导致你的程序在getconnections的时候大量的等待时间,
而你又强制要求了最小连接数.所以程序一直在不停的去拿数据库连接.

yueyakk
yueyakk 嗯,谢谢,我去看看。
大约 3 年之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2015.11.18 13:28

首先,看下项目代码中的连接资源使用完成后是否及时关闭了呢?
其次,proxool连接池配置中有一项houseKeepingTestSql,只有添加了这一项proxool才会自动侦测各个连接的状态并决定是否销毁或创建。

pardream
pardream   2016.01.26 21:00

这是由于proxool中有两个监控线程使用了while(true),这就占据了两个线程的CPU处理能力,以我的CPU,4核8线程,就相当于占据了一个核的运算量,即有一个CPU看起来是100%的使用率。
目前这个问题还无法避免。
我刚刚测试了proxool, c3p0, hikaricp这3个连接池,还是hikaricp的效率高,但稳定性尚不知,另外hikaricp需要jdk1.7及以上的环境,对老系统来说,还不能使用。
建议换用c3p0吧,效率比proxool要高出一些。从其它评测来看,稳定性也不如c3p0。
还有其它人推荐的druid,没有测试过,不清楚如何。

yueyakk
yueyakk 回复中年風雨: 换了之后,cpu占用一下就下来了
2 年多之前 回复
yueyakk
yueyakk 我换了c3p0
2 年多之前 回复
pardream
pardream 更正一下,hikaricp有java1.6版本的。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!