说明:文件句柄限制分为「系统级」和「用户级」,套接字数量受多个内核参数共同影响,以下配置需根据服务器硬件与业务需求调整(示例值适用于中高并发场景)。
一、修改最大文件句柄数
1.1 临时修改(立即生效,重启失效)
执行以下命令,仅对当前会话生效:
# 修改系统级最大句柄数(所有用户共享) sudo sysctl -w fs.file-max=655350 # 修改当前用户会话的句柄数限制 ulimit -n 65535
1.2 永久修改(重启后仍生效)
编辑系统级配置文件
/etc/sysctl.conf
:sudo vi /etc/sysctl.conf
在文件末尾添加以下内容(设置系统级最大句柄数):
fs.file-max = 655350 # 系统级最大文件句柄数,建议不低于 655350
编辑用户级限制文件
/etc/security/limits.conf
:sudo vi /etc/security/limits.conf
在文件末尾添加以下内容(* 表示所有用户,也可指定具体用户名如 root):
* soft nofile 65535 # 软限制:用户可临时突破,但会有警告 * hard nofile 65535 # 硬限制:用户无法突破,优先级高于软限制
二、修改最大套接字数
套接字数量受内核网络参数控制,需通过 /etc/sysctl.conf
永久配置:
2.1 编辑内核配置文件
sudo vi /etc/sysctl.conf
在文件末尾添加或修改以下参数(核心参数说明见注释):
# 1. TCP 半连接队列最大长度(SYN 等待状态的连接数) net.ipv4.tcp_max_syn_backlog = 16384 # 2. 监听队列最大长度(已完成三次握手的连接等待被应用处理的数量) net.core.somaxconn = 16384 # 3. 网卡接收队列最大长度(应对突发网络流量) net.core.netdev_max_backlog = 16384 # 4. TIME_WAIT 状态套接字最大数量(避免大量 TIME_WAIT 占用端口) net.ipv4.tcp_max_tw_buckets = 600000 # 5. 允许复用 TIME_WAIT 端口(可选,高并发场景推荐开启) net.ipv4.tcp_tw_reuse = 1 # 6. 系统所有协议的总套接字缓存大小(单位:页,1页=4KB) net.core.wmem_max = 16777216 # 写缓存最大值 net.core.rmem_max = 16777216 # 读缓存最大值
三、使配置生效
让内核参数(sysctl.conf)立即生效:
sudo sysctl -p
让用户句柄限制(limits.conf)生效:
需重新登录当前用户(或重启服务器),新配置才会对用户会话生效。
四、验证配置结果
执行以下命令,确认配置是否成功:
# 1. 查看系统级最大句柄数 cat /proc/sys/fs/file-max # 2. 查看当前用户句柄数限制 ulimit -n # 3. 查看套接字相关参数配置 sysctl net.ipv4.tcp_max_syn_backlog net.core.somaxconn net.core.netdev_max_backlog
注意:若业务为高并发服务(如 Web 服务器、数据库),建议逐步调大参数并观察系统负载,避免一次性设置过大导致资源浪费。