如何增加Serversocket的最大连接数?

问题描述 投票:0回答:1

我想测试ServerSocket的限制连接。

这是我的服务器:

import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Server{
  public static void main(String[] args) throws Exception{
    ServerSocket server = new ServerSocket(8088);
    ArrayList<Socket> connsList = new ArrayList<Socket>();
    while(true){
      connsList.add(server.accept());
      System.out.println(connsList.size());
    }
  }
}

这是我的客户:

import java.net.Socket;
import java.util.*;

public class Client{
  public static void main(String[] args) throws Exception{
    for(int i = 3000; i < 60000; i++){
      try{
        Socket con = new Socket("localhost", 8088);
      }catch(Exception e){
      }
    }
  }
}

运行此代码后,当连接增加时,当ArrayList的大小约为4000时,Server将关闭。

...
4031
4032
4033
4034
4035
4036
4037
4038
Exception in thread "main" java.net.SocketException: Too many open files in system (Accept failed)
        at java.base/java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.base/java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:459)
        at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:551)
        at java.base/java.net.ServerSocket.accept(ServerSocket.java:519)
        at Server.main(Server.java:11)

似乎一台服务器只能容纳大约4k的连接。

是否有一些增加这个数字?

$ java --version
java 10 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)

在macOS上。

java serversocket
1个回答
0
投票

此问题与java.net.ServerSocket无关,而与文件系统无关,可以同时打开多少个文件描述符(FD)。

$ ulimit -n

从终端检查这个。它可能是一个类似于4000的数字。

$ ulimit -n <value>

要改变金额。

使用此命令不会永久更改ulimit,具体如何操作取决于您运行的操作系统,因此我无法给出确切的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.