服务端是用NIO写的,操作系统是RedHat Linux,客户端采用短连接的方式接入,对每个客户端连接都启动一个独立线程进行处理;并发数小的时候跑上几个月都没有问题,并发数一高隔几天就断一次,服务端口出现大量SYN_RECV的半连接,停止服务,客户端再也无法接入。请大家帮忙分析一下可能是什么原因,目前正在将客户端改为长连接接入,但还需要时间,有没有什么有效措施能避免这种现象?
调试欢乐多
否则就是你的代码问题
用一些跟踪软件如jprofiler之类的 跟踪一下服务端
看看是什么没有是否
jprobe也行吧
是不是没有主动去关闭掉,如果等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();
}