我需要构建一个可以处理~10_000个请求/秒的UDP服务器.从下面的代码开始,测试
java套接字是否可以处理这些请求数.
我用~9000个请求轰炸服务器一分钟,
Total number of requests sent from the client : 596951
在我看到的tcp转储中
90640 packets captured
175182 packets received by filter
84542 packets dropped by kernel
UDP服务器代码:
try (DatagramSocket socket = new DatagramSocket(port)) {
System.out.println("Udp Server started at port :" + port);
while (true) {
byte[] buffer = new byte[1024];
DatagramPacket incomingDatagramPacket = new DatagramPacket(buffer, buffer.length);
try {
socket.receive(incomingDatagramPacket);
LinkedTransferQueue.add(incomingDatagramPacket);
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
} catch (SocketException e) {
e.printStackTrace();
}
What is the the probable cause kernel dropping the packets in program
this simple ?
How to reduce it ? Any other implementation ?
从这个link,从评论中读取,UDP协议的丢包总是会发生在网络到java socket.recieve方法之间.
注意:必须弄清楚捕获的tcpdump数据包中的异常,但丢弃了大量数据包.
tcpdump中的异常是lack of buffer space,为了知道收到的数据包的数量,我使用的是iptraf-ng,它给出了每个端口收到的数据包数:)