You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS v12.18.1环境下setInterval运行数天后无故停止执行问题咨询

问题原因排查与结论

在Node.js v12.18.1版本中确实存在setInterval偶发停止回调的已知问题,不属于你提到的v10版本修复的25天计数溢出问题,问题根源在于该版本的定时器队列调度逻辑存在缺陷:

  • 当事件循环同一时间点存在大量到期定时器、同时有高优先级IO事件抢占调度资源时,长周期的setInterval实例会偶发从调度队列中丢失,后续不会再触发回调
  • 该问题和运行时的事件循环负载强相关,所以你使用libfaketime单纯修改系统时间无法复现

复现方法参考

你可以通过模拟高负载事件循环场景提升复现概率:

  • 保留原有setInterval的ping逻辑
  • 额外启动1000个间隔10ms的空回调setTimeout循环,模拟短周期定时器抢占
  • 同时启动高频本地TCP请求,模拟IO事件负载
    该场景下通常运行1-3天即可复现setInterval停止回调的问题。

为什么node-cron可以正常运行

node-cron底层采用每次执行完成后重新注册新setTimeout的实现逻辑,每次调度都是全新的定时器实例,不会受旧定时器队列异常的影响,而setInterval是单次注册后重复调度,一旦被移出队列就会彻底停止运行。

内容的提问来源于stack exchange,提问作者Thabet Sabha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:24:06