`
san_yun
  • 浏览: 2662432 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Connection reset by peer

 
阅读更多

问题记录,最近遇到Connection reset by peer 这个错误,错误日志记录如下:

 

13-09-11 11:57:04 [ERROR] com.duitang.dboss.remote.nio.DbossServerHandler  - dboss hander exceptionCaught,RemoteAddress=/192.168.172.8:54763
java.io.IOException: Connection reset by peer
	at sun.nio.ch.FileDispatcher.read0(Native Method)
	at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
	at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:198)
	at sun.nio.ch.IOUtil.read(IOUtil.java:171)
	at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:243)
	at org.jboss.netty.buffer.HeapChannelBuffer.setBytes(HeapChannelBuffer.java:156)
	at org.jboss.netty.buffer.AbstractChannelBuffer.writeBytes(AbstractChannelBuffer.java:425)
	at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:305)
	at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:275)
	at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:196)
	at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

 原因:

服务器读取数据的时候,客户端主动关闭了socket。

 

解决办法:

主要需要定位是客户端为何主动关闭。最终通过debug发现原因在于GenericObjectPool的addObjectToPool():

private void addObjectToPool(Object obj, boolean decrementNumActive) throws Exception {
        boolean success = true;
        if(_testOnReturn && !(_factory.validateObject(obj))) {
            success = false;
        } else {
            _factory.passivateObject(obj);
        }

        boolean shouldDestroy = !success;

        // Add instance to pool if there is room and it has passed validation
        // (if testOnreturn is set)
        synchronized (this) {
            if (isClosed()) {
                shouldDestroy = true;
            } else {
                if((_maxIdle >= 0) && (_pool.size() >= _maxIdle)) {
                    shouldDestroy = true;
                } else if(success) {
                    // borrowObject always takes the first element from the queue,
                    // so for LIFO, push on top, FIFO add to end
                    if (_lifo) {
                        _pool.addFirst(new ObjectTimestampPair(obj));
                    } else {
                        _pool.addLast(new ObjectTimestampPair(obj));
                    }
                    if (decrementNumActive) {
                        _numActive--;
                    }
                    allocate();
                }
            }
        }

        // Destroy the instance if necessary
        if(shouldDestroy) {
            try {
                _factory.destroyObject(obj);
            } catch(Exception e) {
                // ignored
            }
            // Decrement active count *after* destroy if applicable
            if (decrementNumActive) {
                synchronized(this) {
                    _numActive--;
                    allocate();
                }
            }
        }

    }

 

 第17行:

if((_maxIdle >= 0) && (_pool.size() >= _maxIdle)) {  
    shouldDestroy = true;

默认 maxIdle 是8,如果NumIdle即pool.size()大于8就需要销毁对象。

通过修改maxIdle即可搞定此问题。

 

针对apache pool写了一个总结: PoolableObjectFactory几个方法的总结 编辑

 

 

  • 大小: 154.9 KB
分享到:
评论

相关推荐

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

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

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

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

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

    然而,在处理网络连接时,有时会遇到错误提示"CURL ERROR: Recv failure: Connection reset by peer"。这个错误通常意味着在数据传输过程中,服务器或客户端意外地断开了连接,导致通信失败。以下是针对该问题的详细...

    java.net.SocketException Connection reset 解决方法

    * Connection reset by peer:Connection reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器端之间的连接断开后,导致连接的一端继续发送数据,引发该异常。 实践经验 通过实践经验,我们可以...

    connection_reset.rar

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

    Docker配置阿里云镜像加速pull的实现

    read tcp 192.168.31.60:55550->104.18.123.25:443: read: connection reset by peer 传输异常 然后看见网上说可以配置阿里云提供的镜像加速 具体方式 进入阿里云的容器镜像服务 快速链接: 容器镜像服务 复制加速...

    java中的connection reset 异常处理分析

    ECONNRESET错误表示"connection reset by peer",即对方(通常是服务器)主动关闭了连接。这可能是因为服务进程在客户端之前结束,导致服务器发送一个FIN包来结束连接。如果客户端此时尝试再次发送数据,服务器会...

    sms-SMSCAT2019.conf

    此资源为深信服外置短信中心接口,可使用官方的工具smsservice工具,但短信猫放在其它位置通过网络使用外部接口时,频繁出现连接不稳定,[SMS_SP]readn failed: Connection reset by peer,此时主要原因在连接配置上...

    Connection

    根据给定的文件信息,我们可以总结出以下关于SQL数据库连接(Connection)的相关知识点: ### SQL数据库连接(Connection)概述 在Java中,`Connection`对象是JDBC API的核心组件之一,用于与数据库建立连接。它是...

    远程桌面软件:rustdesk

    主要语言:Rust 项目分类:[工具] [应用软件] 项目标签:[桌面应用] 推荐理由:一款免费远程桌面软件,支持多平台,包括Linux、Mac、Windows和Android。它以开箱即用的方式提供远程桌面功能,无需任何复杂的配置。...

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

    例如,如果服务器端关闭了连接,而客户端还在尝试发送数据,那么客户端会收到"Connection reset by peer"的错误信息。 2. **未关闭的连接导致异常**:另一种情况是一端程序退出,但未正确关闭Socket连接。当另一端...

    XXL-JOB调度系统学习、调度流程、spring生命周期

    XXL-JOB是一个分布式任务调度平台,其设计思想是将调度行为抽象成一个独立的“调度中心”,这个中心不承担具体的业务逻辑,而是负责发起调度请求。任务则被抽象为分散的`JobHandler`,由“执行器”来统一管理和执行...

    Modbus TCP客户端和服务器示例

    **Modbus TCP客户端和服务器示例** 在工业自动化和物联网(IoT)领域,Modbus是一种广泛使用的通信协议,它允许设备之间进行简单的数据交换。本文将深入探讨Modbus TCP,这是一种在网络环境中运行的Modbus变体,尤其...

    platform-tools_r28.0.2-linux adb fastboot

    Fixes flakiness of adb shell port forwarding that leads to "Connection reset by peer" error message. Fixes authentication via ADB_VENDOR_KEYS when reconnecting devices. Fixes authentication—when the ...

    platform-tools-r28.0.2-windows-adb-fastboot

    Fixes flakiness of adb shell port forwarding that leads to "Connection reset by peer" error message. Fixes authentication via ADB_VENDOR_KEYS when reconnecting devices. Fixes authentication—when the ...

    test-connection-reset

    有关详细说明,请参考 。 在本地重现此问题的步骤: 设定环境 npm install 启动服务器 npm start 在单独的终端中运行测试客户端 npm run client ... 因为从上游的角度来看,连接已关闭,所以它为此请求发送了一个[RST...

Global site tag (gtag.js) - Google Analytics