我想测试下linux支持最大的backlog数。
服务端代码:
final ServerSocket serverSocket = new ServerSocket(9999,Integer.MAX_VALUE);
Thread.sleep(Integer.MAX_VALUE);
serverSocket.close();
客户端代码:
for(int i=0;i<Integer.MAX_VALUE;i++){
final long l = System.currentTimeMillis();
try {
final Socket socket = new Socket("localhost",9999);
} catch (IOException e) {
e.printStackTrace();
i--;
continue;
}
final long time = System.currentTimeMillis() - l;
System.out.println("client send request : "+i + ",耗时: "+time + "ms");
}
然后我发现一个很有意思的问题:
前面连接很快,机会0毫秒就处理好了,但是后面的连接非常慢,隔了1秒才连接好。
经过实际测试:
- 不同的linux机器,发现这个值(130)还不是固定的
- 这个值是所有client共用的,比如一个server,两个部署在不同机器的client,结果发现,两个client连接次数累积到130(一个65另外一个也65),就会阻塞住