`
itwangxinli
  • 浏览: 147887 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Connection Reset的解决与DHCP的使用技巧

阅读更多

说明:在解决问题的时候,参考了以下文章
http://blog.csdn.net/wuqingyong/archive/2006/09/07/1187293.aspx
http://jayenho.blog.51cto.com/37194/91556
作为对问题的总结,特写本文。


最近总是遇到tomcat的log File报Connection reset的问题,使用的是JNDI的方式来使用DataSource。
Apache Tomcat使用org.apache.naming.factory.DbcpDataSourceFactory作为默认的数据源工厂。


Tomcat的DBCP使用Apache的ObjectPool作为Connection Pool的实现,在构造GenericObjectPool的时候,会生成一个Inner Class Evictor,实现Runnable的接口。如果属性_timeBetweenEvictionRunsMillis > 0,每过_timeBetweenEvictionRunsMillis毫秒后Evictor会调用evict method,检查Object的idle time是否大于属性_minEvictableIdleTimeMillis毫秒(如果_minEvictableIdleTimeMillis设置为<=0则忽略,使用default value 30分钟),如果是则销毁该Object,否则就激活并进行Validate,然后调用ensureMinIdle method检查确保Connection Pool中的Object个数不小于属性_minIdle。在调用returnObject method把Object放回ObjectPool时候,需要检查该Object是否有效,然后调用PoolableObjectFactory的passivateObject method使Object处于inactive状态,再检查ObjectPool中的对象个数是否小于属性_maxIdle,是则可以把该Object放回到ObjectPool,否则销毁此Object。
 
除此之外,还有几个比较重要的属性,_testOnBorrow,_testOnReturn,_testWhileIdle,这些属性的意思是取得,返回对象,空闲时候是否进行Valiadte,检查对象是否有效。默认都为False,只有把这些属性设为True,再提供_validationQuery语句就可以保证DBCP始终有效了,例如,Oracle中就完全可以使用select 1 from dual来进行验证,这里要注意的是,DBCP要求_validationQuery语句查询的Result Set必须为非空。
 
在Tomcat的Server.xml,我们可以看看下面的这个例子:
 
<Resource name="lda/raw"
              type="javax.sql.DataSource"
               password="lda_master"
               driverClassName="oracle.jdbc.driver.OracleDriver"
               maxIdle="30" minIdle="2" maxWait="60000" maxActive="1000"
               testOnBorrow="true" testWhileIdle="true" validationQuery="select 1 from dual"
               username="lda_master" url="jdbc:oracle:thin:@192.160.100.107:15537:lcststd"/>
 这样的话,就可以避免产生Connection Reset的错误了.
这样一来,就能够解决Connect Reset的问题了。刚才说了,其实很多App Server都会有相应的配置地方,只是大型的服务器正好提供了Admin Console,上面可以显式的配置Connection Pool,也有明显的属性选择,这里就不一一详述了,都是眼见的功夫。
分享到:
评论

相关推荐

    java.net.SocketException Connection reset 解决方法

    "java.net.SocketException Connection reset 解决方法" 在 Java 编程中,SocketException 是一种常见的异常,特别是在网络编程中。Conexion reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器...

    connection reset解决方案(亲测可用).md

    connection reset解决方案(亲测可用).md

    linux设置connection was reset

    linux设置connection was reset

    java.net.SocketException: Connection reset 解决方法

    Java中的`java.net.SocketException: Connection reset`是一个常见的网络编程错误,通常表示在TCP/IP通信过程中,连接突然中断。这个异常可能在客户端或服务器端发生,通常与数据传输的异常中断有关。 首先,我们来...

    connection_reset.rar

    解决oracle数据库发生'Connection reset by peer' or 'Connection reset'的错误 这边的数据库连接是kettle自带的h2数据库,只要有kettle就有这个数据库,目录位于data-integration\samples\db\,连接方式是 ...

    linux iptables防火墙黑名单(封IP) Connection reset by peer

    linux iptables防火墙黑名单(封IP) Connection reset by peer

    ConnectionResetError(解决方案).md

    以下是一些解决ConnectionResetError的通用代码示例和相关知识点。 首先,一个直接的解决方案是采用重试机制。当发生ConnectionResetError时,程序可以等待一段时间后重新尝试执行操作,这种方法尤其适用于临时网络...

    connection reset by peer问题总结及解决方案

    "Connection Reset by Peer" 是一个常见的网络错误,通常在数据传输过程中出现,表明通信的另一方(客户端或服务器)突然终止了连接。这个问题可能由多种原因引起,下面我们将详细探讨这些原因并提供相应的解决方案...

    java中的connection reset 异常处理分析

    为了调试和分析"connection reset"问题,开发者可以使用以下方法: 1. 使用网络调试工具(如Wireshark)来捕获和分析网络包,查看连接关闭的具体过程。 2. 在Java代码中添加异常处理逻辑,记录详细的错误信息,包括...

    ConnectionResetError.md

    1. ConnectionResetError是网络编程中常见的一种错误,尤其在使用Python的requests库进行网络请求时容易遇到。该错误的出现意味着在发送或接收数据时连接被对方重置。 2. 解决ConnectionResetError的常见方法之一是...

    错误 101 (net--ERR_CONNECTION_RESET).docx

    错误 101 (net--ERR_CONNECTION_RESET).docx

    PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法

    为了解决"Connection reset by peer"错误,我们可以尝试以下几种方法: 1. **禁用SSL验证**:在某些情况下,为了快速测试或调试,可以临时禁用Curl的SSL证书验证。这可以通过设置`CURLOPT_SSL_VERIFYPEER`和`...

    ERR_CONNECTION_RESET(解决方案).md

    最后,解决ERR_CONNECTION_RESET问题时还需要注意总结和归纳,因为具体的解决方案往往依赖于问题出现的具体环境和条件。需要从网络配置、服务器设置和客户端代码三个方面综合考虑,通过逐步排查和测试,找到问题的...

    有关pycharm登录github时有的时候会报错connection reset的问题

    在使用PyCharm进行GitHub操作时,有时可能会遇到“connection reset”错误,这通常是由于GitHub的安全策略更新或者网络连接问题导致的。PyCharm是一款强大的Python集成开发环境,它集成了版本控制工具,包括对GitHub...

Global site tag (gtag.js) - Google Analytics