说明:在解决问题的时候,参考了以下文章
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 编程中,SocketException 是一种常见的异常,特别是在网络编程中。Conexion reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器...
connection reset解决方案(亲测可用).md
linux设置connection was reset
Java中的`java.net.SocketException: Connection reset`是一个常见的网络编程错误,通常表示在TCP/IP通信过程中,连接突然中断。这个异常可能在客户端或服务器端发生,通常与数据传输的异常中断有关。 首先,我们来...
解决oracle数据库发生'Connection reset by peer' or 'Connection reset'的错误 这边的数据库连接是kettle自带的h2数据库,只要有kettle就有这个数据库,目录位于data-integration\samples\db\,连接方式是 ...
linux iptables防火墙黑名单(封IP) Connection reset by peer
"Connection Reset by Peer" 是一个常见的网络错误,通常在数据传输过程中出现,表明通信的另一方(客户端或服务器)突然终止了连接。这个问题可能由多种原因引起,下面我们将详细探讨这些原因并提供相应的解决方案...
为了调试和分析"connection reset"问题,开发者可以使用以下方法: 1. 使用网络调试工具(如Wireshark)来捕获和分析网络包,查看连接关闭的具体过程。 2. 在Java代码中添加异常处理逻辑,记录详细的错误信息,包括...
错误 101 (net--ERR_CONNECTION_RESET).docx
为了解决"Connection reset by peer"错误,我们可以尝试以下几种方法: 1. **禁用SSL验证**:在某些情况下,为了快速测试或调试,可以临时禁用Curl的SSL证书验证。这可以通过设置`CURLOPT_SSL_VERIFYPEER`和`...
在使用PyCharm进行GitHub操作时,有时可能会遇到“connection reset”错误,这通常是由于GitHub的安全策略更新或者网络连接问题导致的。PyCharm是一款强大的Python集成开发环境,它集成了版本控制工具,包括对GitHub...
read tcp 192.168.31.60:55550->104.18.123.25:443: read: connection reset by peer 传输异常 然后看见网上说可以配置阿里云提供的镜像加速 具体方式 进入阿里云的容器镜像服务 快速链接: 容器镜像服务 复制加速...
ERR_CONNECTION_RESET的解释是:ERR-错误CONNECTION-连接-RESET-重复 Google没有对此错误的解决方案因此会再次提示用户这个网站含有未知错误
在Java中,`Connection`对象是JDBC API的核心组件之一,用于与数据库建立连接。它是应用程序与数据库之间交互的基础,通过`Connection`对象,可以执行SQL语句、获取结果集等操作。 ### Java数据库连接(JDBC)框架 ...
关于用jmeter做性能测试时的测试报告导出方法和connection reset报错信息的分析以及解决方案。
NULL 博文链接:https://jian1120java.iteye.com/blog/1974813
为什么会显示连接已重置ERR_CONNECTION_RESET