簡體   English   中英

如何增加Serversocket的最大連接數?

[英]How to increase the maximum connections number of a Serversocket?

我想測試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時,服務器已關閉。

...
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.net.ServerSocket無關,而與文件系統以及可以同時打開多少個文件描述符(FD)有關。

$ ulimit -n

從終端檢查。 它可能是與4000相似的數字。

$ ulimit -n <value>

更改金額。

使用此命令不會永久更改ulimit,確切的操作取決於您所運行的操作系統,因此我無法給出確切的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM