Next.js生产站点随机冻结/502错误,重启PM2可恢复求解决
Next.js 13.2.4 生产站点随机冻结,仅抛出FetchError: getaddrinfo EAI_AGAIN
两台基于Next.js 13.2.4的相似生产站点部署在同一服务器上,会随机发生冻结,此时站点完全无法访问。PM2日志中仅能看到错误:FetchError: request to https://... failed, reason: getaddrinfo EAI_AGAIN。
同一服务器上的其他站点(包括其他Next.js站点)运行正常,该冻结问题完全随机,无法复现。
两台站点此前稳定运行数月无异常,代码无问题;同服务器的staging版本无此问题,但每日访问量仅1-2次,生产环境每日访问量达数百次。
已尝试的解决方法
- 查看Nginx日志,仅显示
connect() failed (111: Unknown error),无有效排查信息 - 执行
yarn upgrade将Next.js从13.1升级至13.2.4 - 删除
node_modules和.next文件夹后重新安装部署,仍会在2-3小时后出现冻结 - 重启服务器
- 切换Node.js版本(从19.7到18再到16),问题依旧存在
服务器环境
- Ubuntu 22.04.2,Linux 5.15.0-67-generic x86_64内核VPS
- 4GB内存,使用率约60%
临时解决方法
执行pm2 reload或pm2 restart可立即恢复站点;目前已设置cron任务每分钟检测站点状态,异常时自动执行pm2 reload。注意:冻结时pm2 list显示站点状态为online。
部署命令
yarn build && pm2 delete prod_name && pm2 start yarn --name prod_name -- next start -p 3100 && pm2 save
内容的提问来源于stack exchange,提问作者ThomasDEV
相关产品推荐
相关产品推荐

