前提认识
sysctl命令
-w 临时改变某个指定参数的值,如
sysctl -w net.ipv4.ip_forward=1
-a 显示所有的系统参数
-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
linux 最大文件打开数nofile及nr_open、file-max说明
- ./etc/security/limits.conf中指定的nofile的值,nofile有上限,不是无穷大。nofile由内核参数nr_open定义的.
“在2.6.25内核之前有个宏定义,定义了这个值的最大值,为1024*1024,正好是100万,而在2.6.25内核及其之后,这个值是可以通过/proc/sys/fs/nr_open来设置。”
- 使用cat /proc/sys/fs/nr_open 查看nr_open值,可通过修改/ect/sysct.conf 修改fs.nr_open值,sysctl -p生效
- fix_max linux内核定义的最大file handles(文件句柄数).nr_open定义是单进程最大file-handles,file-handles(即文件句柄)
file-handles与fd
file-handle应该是一个高层的对象,使用fopen,fread等函数来调用,而FD是底层的一个对象,可以通过open,read等函数来调用;具体不太清楚,不重要,哈哈……
配置文件
临时配置
系统全局允许分配的最大文件句柄数:
# 2 millions system-wide
sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152
echo 2097152 > /proc/sys/fs/nr_open
允许当前会话 / 进程打开文件句柄数:
ulimit -n 1048576
持久化配置
配置/etc/systemd/system.conf
设置服务最大文件句柄数
DefaultLimitNOFILE=1048576
配置/etc/security/limits.conf
/etc/security/limits.conf 持久化设置允许用户 / 进程打开文件句柄数
* soft nofile 1048576
* hard nofile 1048576
配置 /etc/sysctl.conf
系统全局允许分配的最大文件句柄数
fs.file-max = 1048576
TCP 协议栈网络参数
#并发连接 backlog 设置:
net.core.somaxconn=32768
net.ipv4.tcp_max_syn_backlog=16384
net.core.netdev_max_backlog=16384
#可用知名端口范围
net.ipv4.ip_local_port_range='1000 65535'
# TCP Socket 读写 Buffer 设置:
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.optmem_max=16777216
net.ipv4.tcp_rmem='1024 4096 16777216'
net.ipv4.tcp_wmem='1024 4096 16777216'
#TCP 连接追踪设置
net.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_max=1000000
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
# TIME-WAIT Socket 最大数量、回收与重用设置:
net.ipv4.tcp_max_tw_buckets=1048576
#FIN-WAIT-2 Socket 超时设置
net.ipv4.tcp_fin_timeout=15
生效命令
/sbin/sysctl -p