java backlog配置10000,但是的连接速度很快,后面的连接速度很慢。

我想测试下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秒才连接好。

经过实际测试:

  1. 不同的linux机器,发现这个值(130)还不是固定的
  2. 这个值是所有client共用的,比如一个server,两个部署在不同机器的client,结果发现,两个client连接次数累积到130(一个65另外一个也65),就会阻塞住

image.png

阅读 666
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题