自动化脚本“卡住无输出“怎么办: 一次 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 的代码,先问它的出口在哪:响应到达、消息报错、连接关闭、超时未响应------四道门少一道,就是今天的静默挂死。

相关推荐
java_logo25 分钟前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
用户00447295382541 分钟前
练歌镜:让眼镜听懂“循环这一句”
javascript
yuyuxun14 小时前
协同过滤的校园二手物品智能推荐系统的设计与实现 毕业设计-附源码40082
javascript·vue.js·spring boot·python·数据分析·django·课程设计
打工仔折腾 AI6 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
无奈笑天下6 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
fengkai45456 小时前
Prometheus+K8s弹性伸缩综合项目
运维·kubernetes·k8s·prometheus·hpa·vpa
总要学点什么7 小时前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
分布式存储与RustFS8 小时前
镜像仓库的层别只堆本地盘:用 RustFS 给 Harbor 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Agent世界8 小时前
用 CDP 做发布自动化:四道机器闸门与产物验收
前端·javascript
总要学点什么8 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium