自动化脚本“卡住无输出“怎么办: 一次 WebSocket 挂死的排查与自愈模板

现象:进程活着,但日志不再输出

自动化脚本通过 DevTools 协议驱动浏览器干活,跑到一半日志停住,终端安静,进程既不报错也不退出。只看退出码和日志会以为"还在跑",实际上协议通道早就断了,等响应的请求在无限期等待。

根因:pending Promise 没有超时

典型的 CDP 封装是发请求时把 Promise 存进 pending map,收到同 id 的消息再 resolve。一旦对端先死------浏览器标签被关、进程被杀、网络断开------ws 只会触发 close 事件,所有 pending 的 Promise 永远悬空:事件循环里没有待办事项,也没有"任务完成"信号,解释器就这么干等。静默挂死最难缠的地方是它看起来像"任务慢",于是你一直等,浪费大量时间。

三层自愈模板

一、显式 close 处理:给连接注册 onclose 回调,直接打印诊断日志并 process.exit 非零码,不等自然退出;二、请求级超时:send 包一层 Promise.race 超时(比如 30 秒),超时 reject 并带上 method 名,把"永远没响应"变成可见错误;三、磁盘验收:以日志文件和磁盘产物为准判断进度,而不是进程存活------日志 N 分钟没推进就判挂死,拉最后几行日志定位或直接重启。

举一反三

任何"按 id 等远端响应"的模式(JSON-RPC、消息队列回调、子进程 stdio)都踩同一个坑。写往 map 里塞 Promise 的代码,先问它的出口在哪:响应到达、消息报错、连接关闭、超时未响应------四道门少一道,就是今天的静默挂死。

相关推荐
星禾元亨1 小时前
企业 AI 落地 5 步路线图:诊断、企业知识库与 GEO 获客的工程化实施步骤
大数据·人工智能·自动化·创业创新
吴声子夜歌1 小时前
Shell编程——条件测试与比较
linux·运维·shell
津津有味道1 小时前
Web网页写网址到424DNA标签Javascrip源码
javascript·nfc·424dna·写网址·加密提交
minhuan1 小时前
心理访谈转录平台构建:流式VAD采集、声纹聚类、WebSocket实时推送全链路项目解析27.0
websocket·大模型应用·心理访谈转录平台·流式vad采集·声纹聚类·websocket实时推送
吴声子夜歌2 小时前
Shell编程——函数
linux·运维·shell
PC2005-cloud2 小时前
Qdrant 连接失败排查:localhost 解析到 __1,而 Docker 只绑了 IPv4
运维·docker·容器
电子制造自留地2 小时前
AI服务器PCB的超低损耗材料选型逻辑
运维·服务器·人工智能·科技·制造·科普·pcb工艺
宁风3 小时前
JavaScript:函数体系-1
前端·javascript
蓝速科技3 小时前
会议室门牌触控预约选型与落地实战指南丨蓝速科技
大数据·运维·数据库·人工智能·科技