NodeJs+Prerender+PM2环境下WebSocket未打开错误排查求助
排查思路
- 核对依赖版本变更:对比更新前后
package.json里Node.js、Prerender、PM2及相关依赖(比如ws包)的版本差异,重点看WebSocket相关依赖的版本变化,是否存在从稳定版升级到带破坏性更新版本的情况。 - 检查PM2的进程重启机制:更新后PM2是否启用了热重启(graceful reload)?确认Prerender的WebSocket服务是否正确处理了进程退出时的连接关闭逻辑,同时检查PM2的
kill_timeout或wait_ready配置是否合理,避免连接未完全关闭就被强制终止进程,引发CLOSING状态报错。 - 验证Prerender的WebSocket配置:查看Prerender更新后的配置项,有没有新增或修改WebSocket的超时、连接限制、关闭策略等参数,比如是否缩短了空闲连接超时时间,导致正常连接被提前标记为CLOSING状态。
- 查看Node.js的版本特性变化:如果更新了Node.js版本,确认对应版本中WebSocket(如
ws模块或内置API)的行为变更,比如readyState的判定逻辑、连接关闭的触发条件是否有调整,是否存在版本兼容性问题。 - 捕获PM2日志的上下文信息:从Splunk中提取该错误出现前后的完整PM2日志,查看是否有进程重启、资源不足(内存/CPU过高)、端口占用等前置事件,排查是否是进程异常导致WebSocket连接被意外关闭。
- 测试无PM2环境的运行情况:直接用
node命令启动Prerender服务,模拟生产环境的请求流量,观察是否还会出现该错误,以此排除PM2进程管理带来的影响。 - 检查Prerender的集群模式配置:如果PM2启动了多个Prerender进程,确认WebSocket连接在集群模式下是否被正确处理,比如是否存在端口共享、连接调度的问题,导致连接被错误标记为CLOSING状态。
内容的提问来源于stack exchange,提问作者paulalexandru
相关产品推荐
相关产品推荐

