zoukankan      html  css  js  c++  java
  • Java NIO 操作总结

    问题:

      1、Java NIO 出现大量CLOSE_WAIT或TIME_WAIT的端口无法释放

        CLOSE_WAIT:

          参考:http://my.oschina.net/geecoodeer/blog/191774、http://blog.csdn.net/ruixj/article/details/1871979

          解决:检查代码可发现,一端的socket调用了close,但是另外一端的socket没有调用close,于是在另外一端加上了socket.close()函数,使得CLOSE_WAIT消失,TIME_WAIT出现。

            一般来说,到了TIME_WAIT就是比较正常的情况了,下面是TCP状态转换图:

            

            close操作相当于:(操作/A操作后状态/B操作后状态)

            A:我不想说了,但是我可以听到你的(close,发送FIN/A:FIN_WAIT_1/B:ESTABLEISHED)

            B:点头(接收FIN,发送ACK/A:FIN_WAIT_1/B:CLOSE_WAIT)

            A:点头(接收ACK/A:FIN_WAIT_2/B:CLOSE_WAIT)

            B:我也不想说了,我在有限时间内还可以听到你的(close,发送FIN/A:FIN_WAIT_2/B:TIME_WAIT)

            A:点头(接收FIN,发送ACK/A:TIME_WAIT/B:TIME_WAIT)

            B:点头(接收ACK/A:TIME_WAIT/B:CLOSED)

        TIME_WAIT:

          参考:http://my.oschina.net/geecoodeer/blog/191774、http://www.blogjava.net/cooperzh/archive/2011/12/20/366884.html

          解决:socket.setReuseAddress(true);

      2、Java NIO 多线程程序长时间运行时出现“打开的文件过多”错误

        参考:无

        解决:

          1)ls /proc/进程号/fd,发现超多被占用的文件描述符

          2)检查代码,查看一下哪里没有关闭SocketChannel和Selector(特别是Selector!由于是多线程,子线程打开的资源忘记关闭会遗留并造成悲剧啊:()

  • 相关阅读:
    swoole 安装方法 使用即时聊天
    git的介绍以及简单应用
    curl的应用
    linux下监听和同步代码配置
    mac skim 修改背景色
    php 编译安装的一个 configure 配置
    mac mysql error You must reset your password using ALTER USER statement before executing this statement.
    yii2 控制器里 action 大小写组合造成的路由问题
    warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
    redis 自启动脚本
  • 原文地址:https://www.cnblogs.com/DeeFOX/p/3924132.html
Copyright © 2011-2022 走看看