如何准确测量服务器可以处理的套接字连接数?

时间:2015-02-11 11:01:40

标签: java server nio

我有一个TCP服务器,我正在使用一个虚拟客户端进行测试,该虚拟客户端由一个非常简单的Java应用程序组成,该应用程序建立套接字连接并向服务器发送字节流。

我可以在for循环中设置要使用的连接数,因此如果我将其设置为100,它将启动100个连接到服务器并转储数据的线程。

我想知道如何准确地检查我有多少并发连接?

例如,如果我将客户端设置为1,000个连接,那么在连接了大约600个套接字后,我开始获取ConnectException: Connection Refused

这是否意味着服务器可以同时处理500个套接字连接是否公平? 我该如何准确测量?

如果我在每个套接字连接之间添加Thread.sleep() 5纳秒,那么服务器根本不会崩溃。

1 个答案:

答案 0 :(得分:0)

使用ExecutorService执行线程而不是thread.start()方法。 我希望这能解决你的问题。

以下是供参考的示例代码。

public class TCPServer{    
  private ExecutorService pool = Executors.newCachedThreadPool();

  public acceptClients(){
    while(true){
      pool.execute(new ClientListner(serverSocket.accept()));
    }
  }
}

public class ClientListner extends Thread{
  private Socket client;

  public ClientListner(Socket client) {
    this.client = client;
  }

  public void run() {
    //TODO add your code here
  }
}