netstat 命令结果前后不一致?详解 ESTABLISHED 连接数量变化的原因

今天在排查 OpenClaw 网关问题时,连续执行了两次 netstat -ano | findstr :18789,发现第二次的输出结果比第一次多了好几条连接。作为一个强迫症患者,不搞清楚原因实在难受。于是花了点时间研究了一下,把结论分享出来。

一、现象描述

执行同样的命令:

netstat -ano | findstr :18789

第一次输出(数量较少):

第二次输出(数量明显变多):

为什么同样的命令,两次结果不一样?

二、输出结果解读

2.1 看懂每一列

以 TCP 127.0.0.1:18789 127.0.0.1:62411 ESTABLISHED 9872 为例:

字段含义
协议TCP使用 TCP 协议
本地地址127.0.0.1:18789本机 18789 端口(网关)
远程地址127.0.0.1:62411对端端口号 62411(客户端)
状态ESTABLISHED连接已建立,正在通信
PID9872进程号,对应网关进程

2.2 两种角色的连接

这些连接可以分为两类:

角色PID含义
网关侧9872OpenClaw 网关进程,监听并响应请求
客户端侧6056浏览器或其他客户端进程,主动发起连接

成对的连接:9872 和 6056 之间的多个 ESTABLISHED 连接,构成完整的通信通道。

2.3 两种状态

状态含义
LISTENING服务正在监听端口,等待连接("营业中")
ESTABLISHED连接已建立,数据正在传输("正在服务")

三、为什么连接数会变多?

3.1 核心原因:客户端连接数增加了

ESTABLISHED 连接代表活跃的会话。数量增加说明有更多的客户端正在与网关通信。

具体场景

操作对连接数的影响
打开浏览器访问 Dashboard+1 条连接
刷新页面(F5)可能 +1 条(旧连接可能短暂残留)
打开多个标签页每个标签页 +1 条连接
WebSocket 实时通信保持长连接,持续占用
API 工具调用每次调用可能建立新连接
后台 Agent 任务任务执行期间占用连接

3.2 我的真实情况

第一次执行 netstat 时,可能刚启动网关或 Dashboard 页面处于闲置状态,只有少量连接。

第二次执行前,我做了以下操作:

  1. 刷新了 Dashboard 页面

  2. 尝试了一些 Agent 对话

  3. 页面上的实时日志在持续推送

这些操作都会增加 ESTABLISHED 连接的数量

3.3 关于 PID 6056 的说明

输出中的 6056 进程,经过确认是浏览器进程(Chrome/Edge)。浏览器访问 Dashboard 页面时,会建立:

  • 一个 HTTP 连接加载页面资源

  • 一个 WebSocket 连接接收实时更新

  • 可能还有额外的 API 请求连接

这就是为什么一个浏览器窗口会产生多个 ESTABLISHED 连接。

四、对比表格

项目第一次输出第二次输出变化原因
LISTENING(9872)1条1条✅ 网关始终在监听,没变化
ESTABLISHED(9872 侧)1-2条3条⬆️ 客户端连接数增加
ESTABLISHED(6056 侧)1-2条3条⬆️ 浏览器会话数增加
总连接数较少更多⬆️ 网关活跃度提升

总连接数 = LISTENING 1条 + ESTABLISHED(网关侧)N条 + ESTABLISHED(客户端侧)N条 + IPv6监听 可选

五、常见误解澄清

❌ 误解一:连接数是固定的

正解netstat 的输出是动态快照,每一秒都可能变化。它反映的是此刻的连接状态,而不是固定配置。

❌ 误解二:ESTABLISHED 变多说明有问题

正解恰恰相反。更多 ESTABLISHED 连接通常意味着服务正在被正常使用,这是好现象。只要没有大量 TIME_WAIT 或 CLOSE_WAIT 堆积,就没问题。

❌ 误解三:每次刷新页面会保留旧连接

正解:旧连接会进入 TIME_WAIT 状态并在短暂延迟后释放。netstat 看到的是旧连接和新连接短暂共存的现象,很快就会恢复。

六、更多排查技巧

6.1 查看具体进程信息

想知道 PID 9872 到底是什么进程?

tasklist | findstr 9872

6.2 统计各类连接数量

netstat -ano | findstr :18789 | findstr ESTABLISHED | measure

6.3 持续监控连接变化

# 每隔 2 秒刷新一次
while ($true) { cls; netstat -ano | findstr :18789; Start-Sleep 2 }

七、总结

问题答案
连接数为什么变多了?因为打开了 Dashboard、刷新页面、或进行了 API 调用,活跃客户端数增加
变多好还是变少好?有 ESTABLISHED 连接 = 服务在正常工作,是好事
LISTENING 为什么会变?正常情况下不会变,只有服务启动/停止时才会变化
什么情况需要警惕?大量 TIME_WAIT 或 CLOSE_WAIT 堆积,可能表示连接未正常释放

一句话结论

netstat 的输出就像服务的心跳快照 —— LISTENING 说明它还活着,ESTABLISHED 越多说明业务越繁忙。两次结果不一样,纯属正常现象,因为服务器的连接状态本来就是动态变化的。


如果你也遇到过类似"同样的命令输出不一样"的困惑,希望这篇文章能帮你解惑。欢迎在评论区交流讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值