服务端是用NIO写的,操作系统是RedHat Linux,客户端采用短连接的方式接入,对每个客户端连接都启动一个独立线程进行处理;并发数小的时候跑上几个月都没有问题,并发数一高隔几天就断一次,服务端口出现大量SYN_RECV的半连接,停止服务,客户端再也无法接入。请大家帮忙分析一下可能是什么原因,目前正在将客户端改为长连接接入,但还需要时间,有没有什么有效措施能避免这种现象?

解决方案 »

  1.   

    http://weblog.kreny.com/archives/2004/09/ae_syn_recv_cae.html对外的话,也可能收到了攻击
    否则就是你的代码问题
      

  2.   

    谢谢楼上的,我也找了SYN_RECV的相关资料,已经确认不是病毒攻击,如果是代码问题,能不能指点一下可能是哪方面的因素造成? 
      

  3.   

    建议你做一下压力测试
    用一些跟踪软件如jprofiler之类的 跟踪一下服务端
    看看是什么没有是否
    jprobe也行吧
      

  4.   

    估计问题在你的InputStream , OutputStream ,Socket
    是不是没有主动去关闭掉,如果等GC去回收的话,有可能这些流是溢出了
    public void run() {
      InputStream is = socket.getInputStream();
      OutputStream os = socket.getInputStream();  while(true) {
        //....... do sth .....
      }  //主动关闭使用过的流
      socket.shutdownInput();
      socket.shutdownOutput();
      is.close();
      os.close();
      socket.close();
    }