wireshark分析tcp的丢包比较简单,因为可以分析重发次数,和响应;
分析udp的丢包,需要分析带序号的报文,RTP报文,可以分析丢包情况;若是分析iperf的udp包,没法分析出丢包来。
网上说可以使用watch netstat -su查看丢包统计。主要看RcvbufErrors和SndbufErrors,packet receive errors。
丢包原因:
发送端:1. 发送的包太大,2.发包速度太快,3.udp包流量太大,发送缓冲区又太小。
接收端:接收缓冲区太小
使用 sysctl -a | grep mem
socket查看缓冲区大小
lmz@X280:~/下载$ sudo sysctl -a | grep mem
[sudo] lmz 的密码:
net.core.optmem_max = 20480
net.core.rmem_default = 212992
net.core.rmem_max = 212992
net.core.wmem_default = 212992
net.core.wmem_max = 212992
net.ipv4.fib_sync_mem = 524288
net.ipv4.igmp_max_memberships = 20
net.ipv4.tcp_mem = 92376 123168 184752
net.ipv4.tcp_rmem = 4096 131072 6291456
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.udp_mem = 184752 246336 369504
net.ipv4.udp_rmem_min = 4096
net.ipv4.udp_wmem_min = 4096
vm.lowmem_reserve_ratio = 256 256 32 0 0
vm.memory_failure_early_kill = 0
vm.memory_failure_recovery = 1
vm.nr_hugepages_mempolicy = 0
vm.overcommit_memory = 0
/etc/sysctl.conf
修改rmem_default、rmem_max、wmem_default和wmem_max的值,执行sysctl -p即可生效。