我在客户端连接到服务器时遇到了“java.net.ConnectException:Connection timed out”异常。高负载下“java.net.ConnectException:连接超时”的可能原因是什么?
它们都在同一个LAN中,在同一个集群中,它们之间没有防火墙。此外,他们工作得很好,多达1000个客户,或多或少。当我启动1200个客户端时,其中很多(几百个)连接到服务器时会超时。每个客户端不断向服务器发送请求,这会在服务器上施加cpu负载,在几个线程中约为100%。
如何避免此问题,而无需添加服务器也不会增加超时?我也做了sudo sysctl -w net.core.somaxconn=2048
,无济于事。
我使用NIO连接到服务器:
SocketChannel serverChannel = SocketChannel.open();
serverChannel.connect(new InetSocketAddress(serverAddr, serverPort));
serverObjectOutStream = new ObjectOutputStream(Channels.newOutputStream(serverChannel));
serverObjectInStream = new ObjectInputStream (Channels.newInputStream (serverChannel));
为服务器:
while (running) {
SocketChannel newClientChannel = serverSocketChannel.accept();
ObjectInput cliInput = new ObjectInputStream (Channels.newInputStream (newClientChannel));
ObjectOutput cliOutput = new ObjectOutputStream(Channels.newOutputStream(newClientChannel));
// receive client's id and put it in a hashtable of id -> in,out channels
// acknowledge the client
}
你确定服务器可以处理1200个并发客户端? – Joni