出现 timeout 或者是频繁丢包

sysctl -w net.core.rmem_max=131071
sysctl -w net.core.wmem_max=131071
sysctl -p

虚拟机使用 ab 测试的结果,会有包堆积的情况,不会马上处理。 在 ab 测试数据跑完后,依然在处理数据包。

10000    100    缺包不明显
10000    500    出现 ack 处理异常 缺包不明显
10000    1000   出现 ack 处理异常 缺包不明显 有内存堆积不到 1MB 
10000    2000   出现 ack 处理异常 缺包明显 3000 左右 有内存堆积 11MB
20000    500    出现 ack 处理异常 缺包不明显 有内存堆积 11MB
20000    1000   出现 ack 处理异常 缺包明显 13000 左右 有内存堆积 21MB
20000    2000   出现 ack 处理异常 缺包明显 13000 左右 有内存堆积 28MB

notrack

--with-single nfqueue

通过 cat /proc/net/ip_queue,查看 ip queue 运行情况。

如果 Queue dropped 的数值不断增大,则需要修改 ip_queue_maxlen 参数。 比如 echo 4096 > /proc/sys/net/ipv4/ip_queue_maxlen

如果 Netlink dropped 的数值不断增大,修改 net.core.rmem_maxnet.core.wmem_max 参数。 比如 sysctl -w net.core.rmem_max=16777216sysctl -w net.core.wmem_max=16777216

echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse

cat /proc/sys/net/ipv4/ip_local_port_range
cat /proc/sys/net/ipv4/tcp_tw_recycle
cat /proc/sys/net/ipv4/tcp_tw_reuse

echo "32768 61000" | sudo tee /proc/sys/net/ipv4/ip_local_port_range
echo 0 | sudo tee /proc/sys/net/ipv4/tcp_tw_recycle
echo 0 | sudo tee /proc/sys/net/ipv4/tcp_tw_reuse

sion size:235
activate_dead_sessions
user time used:8
sys  time used:28
max memory size:55412

[notice] init for next sess from bak
[notice] ack more than vir next seq
echo "32768 61000" | sudo tee /proc/sys/net/ipv4/ip_local_port_range

频繁出现 ack more than vir next seq 的情况

ack more than vir next seq.png