故障发散-Recv-Q阻塞
#网络kernel socket 预留的发送缓冲的内存数量,分为读写,单位是字节。
.rmem_default = 16777216
.rmem_max = 16777216
.wmem_default = 16777216
.wmem_max = 16777216
# tcp socket 预留的缓存,分为三个字段,min, default, max,单位是字节
net.ipv4.tcp_rmem = 4096 873800 16777216
net.ipv4.tcp_wmem = 4096 873800 16777216
# 调整TCP的内存大小,其单位是页,1页等于4096字节,分为三个字段,low, pressure, high
# low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
# pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
# high:允许所有tcp sockets用于排队缓冲数据报的页面量,当内存占用超过此值,系统拒绝分配socket,后台日志输出"TCP: too many of orphaned sockets"。
# 根据下面high tcp_mem的值进行计算,当tcp 占用内存超过 16777216*4096/1024/1024=65536MB 的时候,就会开始报错
net.ipv4.tcp_mem = 6177504 8236672 16777216
# somaxconn是指服务端所能accept即处理数据的最大客户端数量,即完成连接上限,
= 1024
#tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半连接上限, 有些文章建议也调大这个参数,个人理解是因为在三次握手完成之前socket就存在了,所以在send()和recv() 之前,connect()到appect()之间,如果有大量的半开链接,也会导致类似的问题,但应该不会造成recv-q的阻塞。
tcp_max_syn_backlog = 2048