什么是孤儿套接字上限
孤儿套接字指已经没有用户态进程持有、但仍留在内核里的 TCP socket:应用调用 close 后进入 FIN_WAIT/TIME_WAIT 等状态,或者在进程异常退出后仍处于内核状态机中,都算这一类。net.ipv4.tcp_max_orphans 限制同一时刻允许存在的孤儿 socket 数量,超过上限后新产生的孤儿连接会被 RST 关闭并写入内核日志,作用是防止本地资源被耗尽。
基本信息
| 参数路径 | net.ipv4.tcp_max_orphans |
|---|---|
| 默认值 | 随物理内存自动计算,不固定 |
| 超限行为 | 连接被 RST 终止,内核日志有记录 |
| 相关参数 | tcp_max_tw_buckets、tcp_orphan_retries |
| 观测 | ss -tan 状态分布、/proc/net/sockstat |
| 适用场景 | 高频短连接、连接泄漏排查 |
典型使用场景
- 短连接服务出现不明连接被重置:确认是否触发了孤儿上限
- 进程异常退出后连接堆积的排查
- 连接泄漏定位:判断是应用没关还是内核还没回收
- 容量评估:高并发短连接场景下核对状态机占用的资源
- 日志里出现 orphaned socket 相关信息时的原因确认
查看与核对
查看与核对
sysctl net.ipv4.tcp_max_orphans # 当前上限
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn | head # 状态分布
ss -s # 汇总统计
cat /proc/net/sockstat # sockets 使用概览
dmesg -T | grep -i orphan | tail -5 # 是否有超限记录
# 临时调整(需评估内存代价):sysctl -w net.ipv4.tcp_max_orphans=65536相关参数对照
| 参数 | 作用 | 注意 |
|---|---|---|
| tcp_max_orphans | 孤儿 socket 总量上限 | 随内存自动缩放,别写死 |
| tcp_max_tw_buckets | TIME_WAIT 相关上限 | 超限会打日志并打印计数 |
| tcp_orphan_retries | 孤儿连接重试次数 | 调小会更快放弃对端 |
| tcp_fin_timeout | FIN_WAIT2 停留时间 | 影响孤儿状态的持续时间 |
该值默认按内存规模推算,因此在内存扩容后默认值也会变化;手动写死后扩容不再自动跟随,需要重新评估。
孤儿 socket 增多通常说明应用侧有问题(连接没关、进程崩溃、异常重试风暴),先查应用再谈调参,抬高上限只是把故障延后。
相关指标建议一起采集:ss -s 的汇总、/proc/net/sockstat 的 TCP 使用量与内核日志,单看一个计数无法区分是应用行为异常还是本机资源瓶颈。