linux tcp连接数受限本质是文件描述符限制,需同步调整用户级(limits.conf)、系统级(fs.file-max)和内核级(somaxconn等)三处参数,并验证各层级生效情况。

Linux 中 TCP 连接数受限,本质是文件描述符(file descriptor)限制——每个 socket 连接都占用一个 fd。默认 ulimit -n 为 1024,实际可用连接约 1014 个(扣除 stdin/stdout/stderr、监听 socket 等固定开销)。要真正支持万级并发,必须同步调整用户级、系统级、内核级三处参数,缺一不可。
确认当前限制值
先摸清现状,避免盲目修改:
-
进程级软/硬限制:运行
ulimit -n(软限制)、ulimit -Hn(硬限制) -
系统级总上限:查看
cat /proc/sys/fs/file-max -
已用 fd 数量:执行
cat /proc/sys/fs/file-nr,输出三列,第三列为当前最大可用值 -
某进程实际限制:查
cat /proc/PID/limits | grep "Max open files",这才是进程启动时真正生效的值
用户级限制:limits.conf + PAM
仅靠 ulimit -n 命令临时设置常失败,报 Operation not permitted,是因为硬限制未提前放宽。必须编辑 /etc/security/limits.conf:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 添加两行(以 root 用户为例,也可用
*全局生效):root soft nofile 65536root hard nofile 65536 - 确保
/etc/pam.d/common-session或对应登录配置中含session required pam_limits.so(多数现代发行版默认启用) - 修改后需新登录会话才生效(SSH 重连或切换用户),不是 reload 或重启服务
系统级限制:fs.file-max
用户硬限制不能超过 /proc/sys/fs/file-max。若该值太小(如默认几万),需提升:
-
临时生效:运行
sudo sysctl -w fs.file-max=2097152 -
永久生效:在
/etc/sysctl.conf中追加fs.file-max = 2097152,再执行sudo sysctl -p - 注意:该值建议设为物理内存(KB)的 10% 左右,过高可能引发内存压力;可参考
free -k输出估算
配套网络参数优化
单纯调高 fd 不够,还需匹配网络栈能力:
-
监听队列长度:增大
net.core.somaxconn(默认 128),避免 SYN 队列溢出,建议设为 65535 -
本地端口范围:扩展
net.ipv4.ip_local_port_range(如1024 65535),提升客户端连接容量 -
TIME_WAIT 处理:必要时启用
net.ipv4.tcp_tw_reuse = 1(仅对客户端有效)或tcp_fin_timeout缩短回收时间 - 所有参数均写入
/etc/sysctl.conf并执行sysctl -p生效
改完别忘了验证:新开终端执行 ulimit -n 和 cat /proc/sys/fs/file-max,再起一个服务进程,查其 /proc/PID/limits 确认 Max open files 已更新。不复杂但容易忽略层级依赖。










