备案站点的 TCP 连接排障与内核参数调优
作者:备案源头内容团队内容审核:备案源头内容团队更新于 2026年9月16日
应用日志什么都没有,因为请求没走到应用
高峰期偶发「连接被重置」、建连时间出现 1 秒、3 秒的阶梯、客户端超时但服务端访问日志里连记录都没有——这类问题在应用层永远查不出原因,因为请求在内核的连接队列里就被丢掉了,根本没到应用。这是高并发站点最典型的一类隐形丢连接。
关键要点
- 内核里是两个队列:半连接队列和全连接队列,溢出表现完全不同,处理方式也不同。
- 全连接队列上限取「应用 listen 时传的 backlog」与「系统参数」的较小值,只改系统参数常常无效。
- TIME_WAIT 堆积在服务端通常无害,真正致命的是主动发起方的本地端口耗尽。
- 网上抄来的内核参数可能造成大面积随机失败,改参数前先看计数器增量。
两个队列,两种故障表现
| 队列 | 什么时候进入 | 溢出后的表现 | 受什么限制 |
|---|---|---|---|
| 半连接队列 | 收到 SYN、握手未完成 | SYN 被丢弃,客户端按秒级退避重试,表现为建连很慢 | 内核的 SYN backlog 参数 |
| 全连接队列 | 握手已完成、等待应用 accept | 按配置静默丢弃或直接回 RST,表现为偶发连接重置或超时 | 应用 listen backlog 与系统 somaxconn 的较小值 |
排查动作是看监听套接字上的队列排队数与内核的溢出计数器(「listen queue overflow」「SYN 被丢弃」这两类统计)。关键是看增量而不是绝对值:累计值从开机起就在涨,只有单位时间内的增长才说明现在正在丢连接。
全连接队列溢出的根因通常不是队列小,而是应用 accept 不过来——线程池被慢请求占满、GC 停顿、或下游拖慢了处理。这时候只调大队列相当于把排队人数变多,延迟反而更差,真正要查的是应用为什么慢,思路见 性能优化与压测;若伴随进程内存异常,见 内存泄漏与 OOM 排查。
TIME_WAIT:被误解最多的状态
主动关闭连接的一方会进入 TIME_WAIT 并保持约两倍报文最大生存时间(常见为 60 秒),目的是让迟到的报文自然消亡、并确保对端能收到最后的确认。
- 服务端有几万个 TIME_WAIT,通常无害:它只占少量内存与连接表项,不影响接受新连接。
- 真正的问题出在主动发起大量短连接的一侧:反向代理到后端、应用到数据库或第三方接口。本地可用端口是有限范围,短连接建得太快就会耗尽,表现为「无法分配请求的地址」这类错误。
对策按优先级排:
- 改用长连接与连接池(治本):反代到后端开启 keepalive,见 Nginx 反向代理配置;数据库侧见 数据库连接池与连接数治理。
- 扩大本地端口范围。
- 允许处于 TIME_WAIT 的端口被发起方复用。
- 绝不要照抄「快速回收」类参数:它在 NAT 环境下会因为时间戳不单调而丢弃正常连接,造成同一出口下部分用户随机失败,这类参数在较新的内核里已被移除。
连接被中间设备静默断开
云负载均衡、NAT 网关、防火墙通常对空闲连接有超时(几分钟到几十分钟),超时后单方面丢弃,而且不一定通知两端。连接池里的空闲连接就此变成「已死但看起来还活着」,直到下一次使用才报出莫名的连接重置。
两条对策必须同时做:应用侧连接的最大空闲时间要短于中间设备的空闲超时;同时开启 TCP keepalive 并把默认的两小时探测间隔改成分钟级。连接最大存活时间与上层超时的配合见 超时设置与重试策略。
重传率:判断「是不是网络问题」的第一指标
| 现象 | 观察到的指标 | 结论 |
|---|---|---|
| P99 抖动且出现阶梯式延迟 | 重传率上升 | 链路丢包,重传超时按指数退避 |
| P99 抖动但重传平稳 | 应用耗时上升 | 问题在应用或下游 |
| 单连接上多个请求一起变慢 | 重传集中在少数连接 | 队头阻塞,复用同一连接的请求被拖住 |
重传带来的延迟是百毫秒级的阶梯而不是平滑增长,这是识别丢包最直观的特征。这些指标要长期采集而不是故障时才去看,见 可观测性建设 与 备案网站监控告警体系。
跨地域链路:窗口比带宽更常成为瓶颈
跨地域备份或数据同步跑不满带宽,多数时候不是带宽不够,而是单连接吞吐受限于窗口与往返时延的比值:往返时延越大,同样窗口下的吞吐越低。处理方向是让内核的缓冲区自动调节生效(别手工写死一个小值),或者用多连接并行传输。备份链路的规划见 数据备份与容灾。
改内核参数的纪律
- 先测量再改:没有溢出计数在涨,就不要动队列参数。
- 一次只改一个,并记录改动前的基线指标。
- 改动要持久化到配置管理,只在运行时生效的修改会在重启后悄悄丢失,见 配置与环境变量管理。
- 容器里的网络参数受命名空间与宿主机限制,容器内修改未必生效,见 容器化部署要点。
- 参数变更要有回滚方案,重要调整应先在演练中验证,见 故障演练与预案验证。
常见坑
- 只调系统参数不改应用 backlog:全连接队列上限没变,问题照旧。
- 照抄快速回收类参数:NAT 后的用户随机连不上,极难定位。
- 把 TIME_WAIT 数量当故障指标:盯错了对象,真正的端口耗尽却没监控。
- 应用空闲超时长于中间设备超时:周期性出现连接重置。
- 只看累计计数不看增量:误以为正在丢连接,或误以为一切正常。
常见问题
建连偶发很慢、耗时像阶梯一样跳,是什么原因?
典型特征是 SYN 被丢弃后按秒级退避重试。先看半连接队列与溢出计数是否在增长,同时检查链路重传率。应用日志通常完全正常,因为连接还没建立。
服务器上有几万个 TIME_WAIT,需要处理吗?
服务端的 TIME_WAIT 一般不用特别处理。需要关注的是主动发起连接的一侧是否出现本地端口不足,这才会真正导致建连失败。治本手段是改用长连接和连接池。
连接池频繁报连接被重置,怎么查?
优先怀疑中间设备的空闲超时与应用侧空闲时间不匹配。把连接的最大空闲与最大存活时间设得短于中间设备超时,并开启 keepalive,通常就能消除这类偶发错误。
内核参数需要提前做一轮优化吗?
不建议。绝大多数默认值对中小站点是合适的,盲目调整反而引入难以排查的故障。正确顺序是先采集队列溢出、重传、端口占用等指标,出现瓶颈信号再针对性调整。
资料来源
Linux 内核网络相关公开文档(监听队列、TIME_WAIT 与端口复用、TCP keepalive)、主流反向代理关于上游长连接的官方说明,以及通用的 TCP 性能排查实践资料。本文为通用运维说明,仅供参考,具体参数以实际内核版本与网络环境为准。
相关阅读
网站访问日志留存与安全合规运维要点
为什么要留日志:这是法定要求 《网络安全法》第二十一条明确要求网络运营者"采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月"。已完成备案、对外提供服务的网站属于网络运营者范畴,日志留存不是可选项,而是基础合规义务。 应留存哪些日志 | 日志类型 | 记录内容 | 主要用途 …
网站新增域名如何补充接入备案
企业在原有网站基础上新增域名,比如启用新的品牌域名或拼音域名指向同一网站时,不能直接绑定使用,而是需要在原备案基础上补充办理新增域名的接入手续。 新增域名前的准备工作 新增域名前,建议先确认该域名已经完成实名认证,可以通过 Whois查询 核对域名的注册信息和实名状态,避免因域名信息未实名导致接入申请被退回。同时确认…
备案信息年度核查该如何配合应对
部分省份的通信管理部门会对辖区内已备案网站开展年度或不定期核查,核查方式包括系统比对、电话回访、短信确认等,目的是确认备案信息与网站实际运营情况是否一致。 核查通常关注哪些内容 年度核查一般围绕主体信息、网站信息、接入信息三个维度展开,具体可以对照下表自查: | 核查维度 | 常见核查点 | | --- | --- …
备案号在网站上的规范展示与使用要求
网站完成备案只是第一步,备案号在页面上的展示方式同样需要长期维护,很多主体正是因为展示细节不规范,在日常巡查或年度核查中被要求整改。 展示位置与基本要求 通常做法是将备案号放置在网站首页底部,文字需清晰可辨、不被图片或广告遮挡,且格式应与下发的备案号文本保持一致,不能随意增减字符或调整顺序。是否需要加超链接指向查询入…
备案注销之后重新申请要注意什么
有些主体在此前因业务调整、接入商变更等原因注销了原有备案,之后又因新的业务需要重新申请备案。这种“二次备案”与首次备案在流程上大体相似,但有几个环节容易被忽略。 重新申请前的自查 重新申请前,建议先用 ICP备案查询 确认原备案是否确实已经完成注销,避免出现原备案未彻底清空、新申请与旧记录冲突的情况。同时检查计划使用…
备案信息变更有没有时效要求
备案不是办理完成后就一劳永逸的事项,主体信息、网站信息或联系方式一旦发生变化,通常需要在信息变化后的一定时间内完成变更提交,具体时限以属地管局要求为准。 哪些变化需要及时申报 常见需要变更的情形包括:主办单位名称或证件信息变化、网站负责人更换、联系电话或邮箱失效、网站域名调整、网站内容服务类型发生实质变化等。这类变更…
公司迁址之后备案地址信息如何更新
企业办公地址或注册地址发生变化后,备案信息中登记的地址项也需要相应更新,尤其是当迁址涉及跨区、跨市甚至跨省时,办理流程会比同城内迁址更复杂一些。 迁址后需要关注的信息 迁址后首先要确认工商登记信息是否已经完成同步变更,备案地址一般以工商登记的最新地址为准。可以先用 ICP备案查询 查看当前登记的主办单位地址,与最新的…
备案预留手机号邮箱变更该如何更新
备案信息中登记的手机号和邮箱,是管局与接入服务商联系网站负责人的主要渠道,用于发送核查通知、验证短信、审核结果等重要信息。这些联系方式一旦更换却未同步更新,容易导致关键通知被漏收。 常见需要更新的场景 负责人更换手机号或离职导致原号码停用; 企业邮箱系统迁移,原邮箱地址不再使用; 备案负责人变更,联系方式随之更换。 …