Ubuntu UDP接收缓冲区满和发送缓冲区满

2022-7-13 1,250 7/13

实例风险检测

linux服务器出现了带宽跑不满的情况,后来发现是UDP接收缓冲区满和发送缓冲区满

Ubuntu UDP接收缓冲区满和发送缓冲区满 Ubuntu UDP接收缓冲区满和发送缓冲区满

检查报文数据

先检查报文数据

netstat -s -u #查看报文数据
报文数据
Ubuntu UDP接收缓冲区满和发送缓冲区满
如果出现问题,则情况应该如下:
1、packet receive errors 不为空,并且在一直增长说明系统有 UDP 丢包
2、packets to unknown port received 表示系统接收到的 UDP 报文所在的目标端口没有应用在监听,一般是服务没有启动导致的
3、receive buffer errors 表示因为 UDP 的接收缓存太小导致丢包的数量

修改内核参数

此时修改内核参数的接收值和发送值以及修改pipe大小。直接写入配置

sudo vim /etc/sysctl.conf #编辑配置文件

写入下列内容

kernel.sysrq = 1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.lo.disable_ipv6=0
kernel.printk = 5
net.core.wmem_default = 112428800
net.core.rmem_default = 112428800
net.core.wmem_max = 112428800
net.core.rmem_max = 112428800
net.core.netdev_max_backlog= 2000
net.ipv4.tcp_mem = 2325258 4650516 4650516
net.ipv4.tcp_wmem = 16384 4194304 8388608
net.ipv4.tcp_rmem = 87380 6291456 8388608
fs.pipe-max-size=33554432
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 17476
kernel.sem = 1000 32000 1000 5120
fs.file-max = 655360
net.ipv4.ip_local_port_range = 2048 65000

让配置生效

/sbin/sysctl -p #配置生效

顺便重置下网络

sudo systemctl restart NetworkManager.service
sudo service network-manager restart
sudo systemctl restart network-manager

修改套接字默认mem大小

查询TCP套接字默认mem大小

cat /proc/sys/net/ipv4/tcp_mem

修改TCP套接字默认mem大小

echo 2325258 4650516 9301032 > /proc/sys/net/ipv4/tcp_mem

查询UDP套接字默认mem大小

cat /proc/sys/net/ipv4/udp_mem

修改UDP套接字默认mem大小

echo 179574 359148 718296 > /proc/sys/net/ipv4/udp_mem
其他TCP或这UDP协议栈可以修改的相关参数,请参考:
- THE END -
Tag:

懒人

9月29日16:47

非特殊说明,本博所有文章均为博主原创。