今天在排查 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 | 连接已建立,正在通信 |
| PID | 9872 | 进程号,对应网关进程 |
2.2 两种角色的连接
这些连接可以分为两类:
| 角色 | PID | 含义 |
|---|---|---|
| 网关侧 | 9872 | OpenClaw 网关进程,监听并响应请求 |
| 客户端侧 | 6056 | 浏览器或其他客户端进程,主动发起连接 |
成对的连接:9872 和 6056 之间的多个 ESTABLISHED 连接,构成完整的通信通道。
2.3 两种状态
| 状态 | 含义 |
|---|---|
LISTENING | 服务正在监听端口,等待连接("营业中") |
ESTABLISHED | 连接已建立,数据正在传输("正在服务") |
三、为什么连接数会变多?
3.1 核心原因:客户端连接数增加了
ESTABLISHED 连接代表活跃的会话。数量增加说明有更多的客户端正在与网关通信。
具体场景:
| 操作 | 对连接数的影响 |
|---|---|
| 打开浏览器访问 Dashboard | +1 条连接 |
| 刷新页面(F5) | 可能 +1 条(旧连接可能短暂残留) |
| 打开多个标签页 | 每个标签页 +1 条连接 |
| WebSocket 实时通信 | 保持长连接,持续占用 |
| API 工具调用 | 每次调用可能建立新连接 |
| 后台 Agent 任务 | 任务执行期间占用连接 |
3.2 我的真实情况
第一次执行 netstat 时,可能刚启动网关或 Dashboard 页面处于闲置状态,只有少量连接。
第二次执行前,我做了以下操作:
-
刷新了 Dashboard 页面
-
尝试了一些 Agent 对话
-
页面上的实时日志在持续推送
这些操作都会增加 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越多说明业务越繁忙。两次结果不一样,纯属正常现象,因为服务器的连接状态本来就是动态变化的。
如果你也遇到过类似"同样的命令输出不一样"的困惑,希望这篇文章能帮你解惑。欢迎在评论区交流讨论!

1万+

被折叠的 条评论
为什么被折叠?



