每個UDP包680字節左右,同時發送1500個包到服務器,發現大多被內核丟掉:
修改 /etc/sysctl.conf中關於socket緩沖區的配置 :
net.core.rmem_default = 256960
net.core.rmem_max = 256960
net.core.wmem_default = 256960
net.core.wmem_max = 256960
用sysctrl -p命令使配置生效,解決內核丟包問題
但是如果udp發送速率過大,內核緩沖區即使增大了,服務器應用程序如果處理不過來,仍然會在應用程序那丟包,因此要在應用程序中調大socket的接收緩沖區。
在java中這樣調大:
DatagramPacket datagramPacket = new DatagramSocket();
datagramSocket.setReceiveBufferSize(2040000);