全局服务生效,但是如果当前用户登陆shell,优先登陆用户limits.conf配置,但是limits.conf配置如果超越sysctl.conf配置,则无效(只能往小,不能往大),系统后台服务不受limits.conf限制
vi /etc/sysctl.d/chris_tcp.conf
#TCP 协议栈网络参数
#并发连接 backlog 设置:
net.core.somaxconn = 2048
net.ipv4.tcp_max_syn_backlog = 16384
net.core.netdev_max_backlog = 20000
#TCP Socket 读写 Buffer 设置:
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 4096 16777216 #'1024 4096 16777216'
net.ipv4.tcp_wmem = 4096 4096 16777216 #'1024 4096 16777216'
net.ipv4.tcp_mem = 786432 2097152 3145728 #'16777216 16777216 16777216'
#TCP 连接追踪设置:
net.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
#FIN-WAIT-2 Socket 超时设置:
net.ipv4.tcp_fin_timeout = 15
#TIME-WAIT Socket 最大数量、回收与重用设置:
net.ipv4.tcp_max_tw_buckets=1048576
# 注意:不建议开启該设置,NAT 模式下可能引起连接 RST
#是否重用, 快速回收time-wait状态的tcp连接
#net.ipv4.tcp_tw_reuse = 1
#net.ipv4.tcp_tw_recycle = 1
#可处理最多孤儿socket数量,超过则警告,每个孤儿socket占用64KB空间
net.ipv4.tcp_max_orphans = 131072
#可分配端口 可用知名端口范围
net.ipv4.ip_local_port_range = 1024 65535
#系统级别最大打开文件
#百万并发服务器中常用的几个配置 , 注意一个正向连接要消耗2个tcp, 一个反向代理需要消耗4个tcp
fs.file-max = 2000000
#单用户进程最大文件打开数
fs.nr_open = 2000000
/sbin/sysctl -p 生效
net.ipv4.tcp_rmem用来配置读缓冲的大小,三个值,第一个是这个读缓冲的最小值,第三个是最大值,中间的是默认值
net.ipv4.tcp_wmem用来配置写缓冲的大小。读缓冲与写缓冲在大小,直接影响到socket在内核中内存的占用。
net.ipv4.tcp_mem则是配置tcp的内存大小,其单位是页,而不是字节。当超过第二个值时,TCP进入 pressure模式,此时TCP尝试稳定其内存的使用,当小于第一个值时,就退出pressure模式。当内存占用超过第三个值时,TCP就拒绝分配 socket了,查看dmesg,会打出很多的日志“TCP: too many of orphaned sockets”。
net.ipv4.tcp_max_orphans这个值也要设置一下,这个值表示系统所能处理不属于任何进程的 socket数量,当我们需要快速建立大量连接时,就需要关注下这个值了。当不属于任何进程的socket的数量大于这个值时,dmesg就会看 到”too many of orphaned sockets”。
ip_local_port_range 一台系统上,连接到一个服务时的本地端口是有限的。由于端口是16位整数,也就只能是0到 65535,而0到1023是预留端口,所以能分配的只是1024到65534,也就是64511个。也就是说,一台机器只能创建六万多个长连接。要达到 我们的两百万连接,需要大概34台客户端。
/etc/sysctl.conf与/proc/sys/目录的关系
?
单用户最大打开文件数
vi /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
#使用命令查看
ulimit -a
ulimit -n
注意:此设置 只对当前登陆用户shell有效,对于系统后台服务无效,需要用到/etc/sysctl.d/配置才会对系统生效
|