起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: comqing

登陆系统出现的问题**

[复制链接]
发表于 2008-1-16 15:40:51 | 显示全部楼层
http://myj2ee.blog.sohu.com/69629853.html
=====================
2007-11-06 | commons DBCP 配置说明 标签: 工作  学习  
  前段时间因为项目原因,要在修改数据库连接池到DBCP上,折腾了半天,有一点收获,不敢藏私,特在这里与朋友们共享。
  在配置时,主要难以理解的主要有:removeAbandoned 、logAbandoned、removeAbandonedTimeout、maxWait这四个参数,设置了rmoveAbandoned=true那么在getNumActive()快要到getMaxActive()的时候,系统会进行无效的Connection的回收,回收的Connection为removeAbandonedTimeout(默认300秒)中设置的秒数后没有使用的Connection,激活回收机制好像是getNumActive()=getMaxActive()-2。 有点忘了。
  logAbandoned=true的话,将会在回收事件后,在log中打印出回收Connection的错误信息,包括在哪个地方用了Connection却忘记关闭了,在调试的时候很有用。
  在这里私人建议maxWait的时间不要设得太长,maxWait如果设置太长那么客户端会等待很久才激发回收事件。
回复 支持 反对

使用道具 举报

发表于 2008-1-16 15:53:35 | 显示全部楼层
最权威的说明
http://tomcat.apache.org/tomcat- ... examples-howto.html
=================
Preventing dB connection pool leaks
A database connection pool creates and manages a pool of connections to a database. Recycling and reusing already existing connections to a dB is more efficient than opening a new connection.

There is one problem with connection pooling. A web application has to explicetely close ResultSet's, Statement's, and Connection's. Failure of a web application to close these resources can result in them never being available again for reuse, a db connection pool "leak". This can eventually result in your web application db connections failing if there are no more available connections.

There is a solution to this problem. The Jakarta-Commons DBCP can be configured to track and recover these abandoned dB connections. Not only can it recover them, but also generate a stack trace for the code which opened these resources and never closed them.

To configure a DBCP DataSource so that abandoned dB connections are removed and recycled add the following paramater to the ResourceParams configuration for your DBCP DataSource Resource:

   
             <parameter>
              <name>removeAbandoned</name>
              <value>true</value>
            </parameter>

  
   

When available db connections run low DBCP will recover and recyle any abandoned dB connections it finds. The default is false.

Use the removeAbandonedTimeout parameter to set the number of seconds a dB connection has been idle before it is considered abandoned.

   
             <parameter>
              <name>removeAbandonedTimeout</name>
              <value>60</value>
            </parameter>

  
   

The default timeout for removing abandoned connections is 300 seconds.

The logAbandoned parameter can be set to true if you want DBCP to log a stack trace of the code which abandoned the dB connection resources.

   
             <parameter>
              <name>logAbandoned</name>
              <value>true</value>
            </parameter>

  
   

The default is false.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-16 17:08:27 | 显示全部楼层

谢谢alang

谢谢分享!或许设置个300,你建议呢?
那过了设置的时间,系统是会自动退出,这个时候是退出到登陆界面?如果不是,那这个时候点击了功能会不会出错呢?
或者说设置了这个时间,在这个范围内和范围外会产生什么结果呢?谢谢!
我想知道这么做了之后,某个客户登陆系统N久了没做什么数据操作的话,结果会怎么样?
回复 支持 反对

使用道具 举报

发表于 2008-1-16 17:26:42 | 显示全部楼层
这个设置跟客户端没有关系
你还是没有看上面的分享
这个参数是X3服务器跟数据库之间用到的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-17 09:08:40 | 显示全部楼层
#超时时间(以秒数为单位)
#设置超时时间有一个要注意的地方,超时时间=现在的时间-程序中创建Connection的时间,如果maxActive比较大,比如超过100,那么removeAbandonedTimeout可以设置长一点比如180,也就是三分钟无响应的连接进行回收,当然应用的不同设置长度也不同。
超时时间=现在的时间-程序中创建Connection的时间
removeAbandonedTimeout大概可以怎么算?
回复 支持 反对

使用道具 举报

发表于 2008-1-17 14:48:41 | 显示全部楼层
removeAbandonedTimeout设置被遗弃的连接的超时的时间,即当一个连接连接被遗弃的时间超过设置的时间,那么它会自动转换成可利用的连接,这个时间的长短可以根据使用情况自动调节一个合适的长度,没有具体的算法。有算法应该也是:

超时时间=现在的时间-程序中使用完的却忘记关闭Connection的时间
回复 支持 反对

使用道具 举报

发表于 2008-1-22 09:13:40 | 显示全部楼层
楼主,怎样了?
回复 支持 反对

使用道具 举报

发表于 2008-3-28 11:39:04 | 显示全部楼层
??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-20 16:02:14 | 显示全部楼层
这样吧,先结贴,有问题再向你们请教噢!
回复 支持 反对

使用道具 举报

发表于 2008-5-20 18:18:05 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 04:33 , Processed in 0.037752 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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