Linux系统最大文件句柄数调整解决连接爆满
随着业务量的增长,服务器可能出现“连接爆满”现象,大量TCP连接被拒绝或服务响应异常,这往往与Linux系统最大文件句柄数限制有关。合理调整此项参数,是保障高并发场景下服务稳定的关键。
什么是文件句柄数
文件句柄(File Descriptor)是Linux内核用于标识打开文件、网络连接等资源的整数索引。每个进程能同时持有的句柄数量受系统限制。当短连接数过多(如HTTP、数据库连接)时,句柄耗尽会导致新连接建立失败。
为什么连接爆满时需要调整
- 默认句柄数通常较小(如1024或4096),难以支撑数千并发连接。
- 即使业务正常,临时峰值也可能触达上限,造成连接拒绝或TIME_WAIT堆积。
- 高并发场景下,每个连接占用一个句柄,句柄不足直接引发服务不可用。
调整方法
调整分为临时生效和永久生效两种方式:
临时调整
- 查看当前限制:
ulimit -n 或查看 /etc/security/limits.conf。 - 修改当前会话:
ulimit -n 65535(仅对当前Shell及子进程有效)。
永久调整
- 编辑
/etc/security/limits.conf 文件,添加以下内容:soft nofile 65535
hard nofile 65535
- 修改系统级限制:编辑
/etc/sysctl.conf,添加 fs.file-max = 100000,执行 sysctl -p 生效。 - 重新登录或重启服务使配置生效。
注意事项
- 调整过大可能导致内存占用升高,需结合服务器硬件评估。
- 修改后建议监控句柄使用情况(
lsof、/proc/sys/fs/file-nr)。 - 对于容器化环境,还需调整容器内的限制(如Docker的
--ulimit 参数)。 - 配合TCP调优(如缩短TIME_WAIT时间)可进一步优化连接管理。