这段时间一直被一个SSH系统性能问题困扰,项目在开发过程中出现Tomcat假死的问题。为了查清系统问题的原因,我找了个SIW软件用来监控系统占用端口,发现数据库连接数时常达到连接池设置的最大连接数。我使用的C3P0连接池,我一开始认为是连接池设置问题,可是问题没有解决。然后开发小组开始修改SSH配置文件,貌似系统偶尔能释放部分数据库连接,可是问题还是没有解决。
后来请教了一技术牛人,我们修改了连接池,把C3P0连接池换成DBCP连接池,并且把连接池配置由hibernate.cfg.xml配置文件中迁移到了Spring配置文件中(为了节省时间,我也就不贴连接池配置的代码了),这下系统能释放大部分连接。可是通过监控发现,保持的数据库连接数还是多于连接池配置的空闲连接数,而且时间一久,系统还是会出现卡死的问题,估计就是连接池保持的连接已经失效导致的。
今天下午,我又上网查了这方面的系统问题的介绍资料,偶尔发现网上介绍JConsole监控JVM和开启线程的相关技术(这里我也不介绍JConsole技术,因为网上实在太多了),了解到JVM设置和数据库连接泄漏都会导致系统问题。因为我对JConsole监控信息是如何反映系统问题不是很了解,所以就将感觉能反映系统性能问题的监控信息贴出来,希望大牛们能明白。由于在帖子中,我还没摸索出如何将我监控数据的图片贴上,所以暂时将具体信息贴到了我的博客中,希望我提供的信息还算完善。我的博客地址:http://blog.csdn.net/rogerxp/article/details/7203315
后来请教了一技术牛人,我们修改了连接池,把C3P0连接池换成DBCP连接池,并且把连接池配置由hibernate.cfg.xml配置文件中迁移到了Spring配置文件中(为了节省时间,我也就不贴连接池配置的代码了),这下系统能释放大部分连接。可是通过监控发现,保持的数据库连接数还是多于连接池配置的空闲连接数,而且时间一久,系统还是会出现卡死的问题,估计就是连接池保持的连接已经失效导致的。
今天下午,我又上网查了这方面的系统问题的介绍资料,偶尔发现网上介绍JConsole监控JVM和开启线程的相关技术(这里我也不介绍JConsole技术,因为网上实在太多了),了解到JVM设置和数据库连接泄漏都会导致系统问题。因为我对JConsole监控信息是如何反映系统问题不是很了解,所以就将感觉能反映系统性能问题的监控信息贴出来,希望大牛们能明白。由于在帖子中,我还没摸索出如何将我监控数据的图片贴上,所以暂时将具体信息贴到了我的博客中,希望我提供的信息还算完善。我的博客地址:http://blog.csdn.net/rogerxp/article/details/7203315
解决方案 »
- 求一份J2EE的API中文版
- 急死了!请求各位大侠开导开导小弟。
- 各位大哥有没有谁做过多张图片同时上传的例子
- 如果没有类似.NET的拖拽式RAD环境和大量组件那么可笑的JSF和弱智structs有什么区别?新瓶装旧酒!
- 以下关于线程的程序输出结果求证(抛砖引玉)
- 一部分人负责开发视图,一部分人负责开发业务,这种模式好吗?项目该如何控制?请大家参与讨论
- 我想建立一个站点,请问该用那种结构?
- java中对数据库的操作,不知所措!!高手请进!
- 我做了第一个实例,就出现很多问题,请各位帮帮小弟,谢谢啦
- 在Spring中如何处理配置动态代理生成不同bean实现?
- quartz 实现多任务异步发生
- netbeans 如何整合TortoiseSVN
我不同意6L的说话,你既然都使用了连接池,连接池的作用什么
1.用来创建我们需要的连接(配置范围内的)
2.即使我们的程序出现了异常,但是之后连接池应该去检查有没有空闲的连接,如果有则将其关闭或是其他的操作,而不是不管他。按照6L的理解就是我们的程序出现了异常,连接池就不管我们异常使用的连接,是不对的。
lz如果你的问题解决了,请详细 [email protected] 谢谢!!!!!
2、监控下,出现泄露时的数据库情况。
3、不一定是连接池的事。
1. 系统采用DBCP连接池,并将数据源及连接池配置到Spring配置文件中,不再使用hibernate原生配置文件hibernate.cfg.xml
2. 在Action层的代码中注入的service实体只有set方法,删除所有的get方法(经过测试,getXXService()严重导致系统无响应的情况)
3. struts2跳转配置分别配置为继承自struts-default的普通V-C的页面跳转和继承自json-default的异步数据加载页面配置
4. 将数据库由MySQL换为Oracle,避免MySQL的8小时自动断开连接问题
5. 使用log4j调试系统,调试系统中出现的控制台未打印出的异常,避免因为系统异常导致的连接未释放问题
从目前的系统运行情况看,感觉相当稳定,连接能够迅速释放,暂没发现问题。但是上面采取的措施涉及到的一些原理还不是很理解,很愿意和大家一起讨论数据库连接泄漏的问题处理,希望大侠们也不吝赐教!!