-
Linux 系统排查与优化
-
查看当前缓冲区大小(默认通常很小,如 212992 字节): bash
运行
sysctl net.core.rmem_default # 默认接收缓冲区 sysctl net.core.rmem_max # 最大接收缓冲区 -
临时调高缓冲区(立即生效,重启失效): bash
运行
sysctl -w net.core.rmem_default=26214400 # 25MB sysctl -w net.core.rmem_max=52428800 # 50MB -
永久生效:编辑
/etc/sysctl.conf,添加上述两行,执行sysctl -p加载。
-
优化接收端 IP 分片重组缓冲区(核心)
Linux/Windows 默认的 IP 分片重组缓冲区较小,若大包分片到达不及时 / 数量多,会导致重组失败,表现为 "抓包能看到所有分片,但应用层收不到 UDP 包"。
(1)Linux 系统优化(临时 + 永久)
bash
运行
# 1. 查看当前分片重组配置
sysctl net.ipv4.ipfrag_high_thresh # 重组缓冲区高阈值(默认131072字节)
sysctl net.ipv4.ipfrag_low_thresh # 低阈值(默认196608字节,注意:高阈值 < 低阈值是正常的)
sysctl net.ipv4.ipfrag_time # 分片保留时间(默认30秒,即分片需30秒内全部到达)
# 2. 临时调高缓冲区(立即生效,重启失效)
sysctl -w net.ipv4.ipfrag_high_thresh=524288 # 512KB
sysctl -w net.ipv4.ipfrag_low_thresh=1048576 # 1MB
sysctl -w net.ipv4.ipfrag_time=60 # 延长分片保留时间到60秒
# 3. 永久生效(编辑/etc/sysctl.conf)
echo "net.ipv4.ipfrag_high_thresh = 524288" >> /etc/sysctl.conf
echo "net.ipv4.ipfrag_low_thresh = 1048576" >> /etc/sysctl.conf
echo "net.ipv4.ipfrag_time = 60" >> /etc/sysctl.conf
sysctl -p # 加载配置