答案是调整Linux文件描述符和网络参数以优化高并发服务。首先通过ulimit、cat /proc/sys/fs/file-max等命令查看当前限制,临时用ulimit -n和echo修改,永久配置需编辑limits.conf、启用pam_limits.so,并在systemd中设置DefaultLimitNOFILE,最后通过sysctl.conf优化内核参数如fs.file-max、net.core.somaxconn等,三者协同提升系统稳定性与性能。

Linux系统默认的文件描述符和网络连接数限制通常较低,当运行高并发服务(如Web服务器、数据库或即时通讯服务)时容易出现“Too many open files”错误。要解决这个问题,需要调整系统的最大连接数限制。下面介绍从用户级到系统级的完整优化方法。
查看当前连接数限制
在调整之前,先确认当前系统的限制情况:
- 查看进程级别的文件描述符限制: ulimit -n
- 查看系统级最大文件句柄数: cat /proc/sys/fs/file-max
- 查看当前已使用的文件句柄数: cat /proc/sys/fs/file-nr
- 查看某个进程的打开文件数: lsof -p PID | wc -l
这些命令能帮助你判断是否已接近上限,从而决定是否需要调优。
临时提高最大连接数(重启失效)
如果只是测试或临时使用,可以通过命令快速提升限制:
- 设置当前会话最大文件描述符数: ulimit -n 65536
- 修改系统级最大句柄数: echo 2097152 > /proc/sys/fs/file-max
注意:这种方法在系统重启后会恢复原值,适合调试场景。
永久配置连接数限制
要让设置持久生效,需修改系统配置文件:
- 编辑 limits.conf 文件:
sudo vim /etc/security/limits.conf
添加以下内容:* soft nofile 65536 * hard nofile 65536 root soft nofile 65536 root hard nofile 65536
- 确保 pam_limits 模块已启用:
检查 /etc/pam.d/common-session 中是否包含:
session required pam_limits.so - 对于 systemd 管理的服务,还需修改 systemd 配置:
编辑 /etc/systemd/system.conf 或服务单元文件,添加:
DefaultLimitNOFILE=65536
修改完成后需重新登录或重启系统使配置生效。
优化内核网络参数
高并发场景下,除了文件描述符,还需调整 TCP 相关参数以提升网络性能:
- 编辑 /etc/sysctl.conf 添加:
fs.file-max = 2097152 net.core.somaxconn = 65535 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216
- 应用配置:sysctl -p
这些参数能有效提升短连接处理能力,减少 TIME_WAIT 状态堆积,增强网络吞吐。
基本上就这些。合理设置最大连接数不仅能避免资源不足错误,还能显著提升服务稳定性。关键是把用户限制、系统限制和网络参数三者协同调整,才能发挥最佳效果。不复杂但容易忽略细节。









