设为首页 收藏本站
查看: 542|回复: 0

[经验分享] Tomcat数据库连接池参数测试

[复制链接]

尚未签到

发表于 2017-1-27 13:13:53 | 显示全部楼层 |阅读模式
  刚刚进入公司,实习生一个,被分配任务找出Oracle数据库连接失败的原因。
 第一直觉,数据库连接操作没有关闭,导致数据库连接被阻塞。
 查看数据库SQL语句如下:
  select MACHINE,username from v$session order by MACHINE  ---查看当前连接数据库的机器和用户名
  select count(*) from v$process --当前数据库被连接的次数
  select value from v$parameter where name = 'processes' --数据库允许的最大连接数

 发现数据库最大连接数为150(应该是Oracle默认连接数大小,未深研究)。而当前连接数已经为150,阻塞已成必然。
 查看代码,果然发现许多conn未被关闭。在某个小角落阻塞这数据库连接。。。
 
 既然找到问题,说干就干,关掉这些connection对象。全部关闭后,发现阻塞的情况得到了环境,然而网站的性能仍然不高。
 调查发现,是因为我们的系统要随时向数据库里写入一些log信息,频繁的与数据库建立连接、断开连接确实很耗费性能。
 这样子一定不可以满足需求,没办法,改! 突然想到,学校不是讲过连接池这个东西嘛,干嘛不用呢。
 找来找去,发现采用Tomcat自带的一个数据库连接池,应该可以满足需求。配置简单,性能还可以得到保证。于是google,baidu了一圈,最后Tomcat 6.0的方法如下:
 在tomcat的安装目录小找到conf/context.xml文件,打开后,在<Context>中加入如下的配置: 
  <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"
   maxActive="300" maxIdle="30" maxWait="10000" username="****" password="****"
   driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@***.**.**.***:1521:databasename"
   removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
  />
 具体含义可以网上google一些,相信具体含义可以找到。重启tomcat后,连接池的配置就已经生效了。
 
  下一步就是获取连接池中的connection对象了。
java 具体代码如下:
  Context context = new InitialContext();
  DataSource ds =(DataSource) context.lookup("java:/comp/env/jdbc/oracleds"); 
  conn = ds.getConnection(); 
 在导入需要的Oracle驱动包后,你就可以正常使用Tomcat连接池中被管理的connection对象了。
 在用完的时候,正常调用conn.close()方法就可以了。
 
 在做完这个Task的过程中,我做了几个测试。用来理解数据库配置中的几个参数的作用。
 准备工作:
 a.把参数按如下方式修改:maxActive="15" maxIdle="10" removeAbandonedTimeout="20"
 b.使用一款叫做LambdaProbe的工具监测Tomcat的状态。
 测试一:
  测试目的:找到Abandoned Connection是指哪一类的connection。
  1.在JSP中打开一个数据库连接,不关闭。
  刷新页面13此,发现数据库连接数为13,20秒过后,发现连接数仍未13.
  2.修改上面JSP页面,使用完毕后,调用close()方法,关闭数据库连接。
  快速刷新13次,发现数据库连接为13。20秒后,发现连接数变为10(默认空闲连接为10)。说明一部分连接被Tomcat连接池回收。
  由此可见,所谓的AbandonedConnection不是指未关闭的connection,而是指那些曾经连接,后来关闭的close。
 测试二:
  测试目的:找到Tomcat连接池回收那些没有关闭的数据库连接的时刻。
  1.在JSP中打开一个数据库连接,不关闭,即不调用conn.close()方法。
  刷新页面13此,发现数据库连接数为13,20秒过后,发现连接数仍未13.
  2.在JSP中打开一个数据库连接,不关闭。
  刷新页面16此,发现数据库连接数为15,20秒过后,发现连接数为10.查看logs/stdout_20100816.log输出日志:可以看到具体哪个页面报出异常。
  由此可见,Tomcat对于那些没有释放的连接。也会采取一定的处理,但是不是马上处理,在连接数达到maxActive所规定的值之前,所有未释放的连接都会被标记为忙连接。当达到maxActive时,如果继续想Tomcat连接池申请连接
  Tomcat会报出异常,并在stdout.log日志中输出。从异常中可以查看到具体是哪个页面没有释放。Tomcat抛出异常后,连接池会强制回收那些连接未释放的连接,并使连接池中的连接数量保持在maxIdle所规定的数量。
 
  小提示:一个查看Tomcat当前状态很有用的工具叫做:LambdaProbe。很好用噢,网上可以下载到所需probe.war和相关使用方法。
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-334124-1-1.html 上篇帖子: 基于tomcat的网站性能调优 下篇帖子: java web项目配置tomcat连接池
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表