每次都是运行 10 多个小时就卡死,不退出执行,也没有错误日志。
所以打了些断点想看看卡死在哪里了,结果在非常奇怪的位置。查看内存溢出,fd 溢出等等都比较正常。stack 追踪太复杂,没找到合适的工具。
查论坛有个解决办法就是限制循环运行的次数,在运行一段时间后主动使用 process.exit 退出然后让 pm2 拉起来。
于是准备去改代码实操了,却发现之前的代码是这样的 👇
let retryCount = 4 * 60 * 60; // 基于库存检测的模式,单次耗时 3s 左右。
(async () => {
// ....
// 循环检测购物车
for (let i = 0; i < retryCount; i++) {
// ...
await sleep(5);
}
})();
Σ(°ロ°),原来是我自己加了 retryCount ,但是我忘记了!!!原来卡死就是循环次数耗尽了。(另外这一段代码循环次数耗尽并不会退出会阻塞住)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.