困扰了近两月的内存泄露问题终于初见眉目了,罪魁祸首:proxool

困扰了近两月的内存泄露问题终于初见眉目了,罪魁祸首:proxool

生产环境的系统近两个月一直不稳定,过两天内存就会占满,通过jprofiler,jrmc各中方法调试,总是找不到任何原因。

昨天,在做另外一项测试中,终于发现了一个最可能的存在的内存泄露的地方,proxool数据库连接池内存泄露。
测试环境:

tomcat6.0
mysql5.0
昨天分别到官方网站下载dbcp,proxool,c3po最新版本。全部配置tomcat下成jndi数据源,连接数都配置成最大300,最小30
jrokit R27.5

testInsertDB.jsp直接通过数据源连接数据库,通过一个事务往数据库每次插入200万条数据库。

<%

Connection conn = CourseDBService.getConnection();
Statement stmt = conn.createStatement();

String sb=new String("insert into t_sys_log values('id");

conn.setAutoCommit(false);


for(int i=5000000;i<7000000;i++){
StringBuilder sb1=new StringBuilder(sb);
sb1.append(i).append("','userId").append(i).append("','userName").append(i).append("',null,'测试课程").append(i).append("',null)");
//System.out.println("-----------------sb="+sb1);

stmt.executeUpdate(sb1.toString());
}

conn.commit();

stmt.close();
conn.close();
%>


tomcat 6启动后占用168M内存,
开始用proxool从100万-300万插入200万数据,tomcat6 占用内存从168M一直涨到1G,在插入完毕后,通过jrmc手动垃圾回收后,通过jrmc观察,时间堆的占用量还在600M左右,怎么也回收不了。

用dbcp从300万-500万插入200万数据,tomcat6 占用内存从168M稍微涨了一点,但是内存变化不大。

用c3p0从500万-700万插入200万数据,tomcat6 占用内存基本没有什么变化。

具体插入的时间我没有太多统计。粗略感觉,好像时间差不多

今天凌晨,服务器上2个tomcat中一个连接池切换成dbcp,到现在内存回收正常,一直很稳定,通过jrmc看内存占用一直稳定在40%左右,在到60%时会回收到40%,最低能回收到30%。

而另外一个依旧用proxool连接池的tomcat,内存占用率从40%一会就升到100%,然后突然回收到40%,然后一会有迅速的达到100%,然后又回收..........,最低只能回收到40%

在线监控中.......

不知道proxool是不是确实有内存泄露...........


-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
proxool.0.9.1基础上做了修改。 改jar名称为:proxool-0.9.1.1,主要修改为以下3点: 1.解决不能Unregister jdbc driver的内存泄露问题。 十二 02, 2013 8:19:43 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc SEVERE: The web application [/xxx] registered the JDBC driver [org.logicalcobwebs.proxool.ProxoolDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 十二 02, 2013 8:19:43 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc SEVERE: The web application [/xxx] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 十二 02, 2013 8:19:43 上午 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc SEVERE: The web application [/xxx] registered the JDBC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 2.解决housekeeper内存泄露问题 3.解决与spring配合时,只能在spring的定义中以bean方式加载proxool问题。(使用servlet方式加载也可以,只是在启动时报错) 加载方式修改为: xmlFile /WEB-INF/conf/proxool.xml org.logicalcobwebs.proxool.configuration.ListenerConfigurator 与spring配合使用时,本加载需要放在spring前面 org.logicalcobwebs.proxool.configuration.ListenerConfigurator org.springframework.web.context.ContextLoaderListener 4.修正了proxool多线程环境下的的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值