连接数上限:文件描述符与端口范围
发布时间:2026-03-30 13:55       
更新时间:2026-03-30 21:35
一台服务器到底能挂多少连接,答案藏在两道门槛后面:文件描述符上限和临时端口范围。做接入层、网关、代理的机器,迟早会和这两道门槛打交道。两道门槛相互独立,过了一道还有一道,排查时两边都要看。
一、第一道门槛:文件描述符
Linux 把每个连接当作文件管理,进程能打开的文件数有上限。ulimit -n 看当前会话值,很多发行版默认 1024,高并发下远远不够。调整分三层:会话内临时生效用 ulimit -n 65535;持久化写 /etc/security/limits.conf,soft 与 hard 两行都写;由 systemd 管理的服务必须在单元文件里加 LimitNOFILE=65535,只改 limits.conf 对它无效,这是最常见的踩坑点。nginx 这类常驻服务还有 worker_rlimit_nofile 参数,改了系统层别忘了它。系统全局上限看 /proc/sys/fs/file-max。nofile 不是越大越好,过大的上限会放大内存占用,按需设置。查某个服务当前的上限别凭记忆,进程实际的值才算数。
二、第二道门槛:临时端口
本机作为客户端向外部发起连接时,内核从临时端口范围里挑端口,默认 32768 到 60999,约两万八千个。代理、采集、爬虫类业务出站并发一高就撞上端口耗尽,症状是 connect 报 Cannot assign requested address,而且常伴随 TIME_WAIT 计数同步暴涨,两件事经常一起出现。对策:sysctl -w net.ipv4.ip_local_port_range="10240 65000",再配合 tcp_tw_reuse 加快端口回收。临时端口只管出站方向,入站监听端口不占这个范围,两者别混。ss -ant 里连接密集的对端,就是端口消耗的大头。
三、验证方法
改完要重启进程才生效,确认某进程的实际值用 cat /proc/PID/limits;压一压真实流量,连接数曲线能不能越过原来的坎,是最终验收,变更前后各记录一次连接数曲线,对比图留档。容器环境另有运行时的 ulimit 继承问题,逐层确认更有必要。
调参顺序建议从单进程上限开始,逐层确认,别一次全调。顺云的高防云服务器 S4-8G 内存更充裕,配合调好的参数能承住更大的连接规模。