Node内存泄漏 node-cron和pm2共同使用造成内存泄漏

文章描述了一次排查Node服务器内存泄漏的过程,问题源于使用PM2和node-cron包,特别是当node-cron任务配置了timezone时。通过切换到croner包解决了内存泄漏问题。

        前不久在自己的Node服务器上线了一个新功能后,今天打开pm2 list一看,node服务器的mem使用竟然达到了500M+,在上线新功能之前,这个Node服务器的内存使用一直在70-80M上下,猜想应该是内存泄露了,于是便有了这次内存泄漏排查。

        首先重启了一下服务器,可看到内存持续上涨

一.误入歧途:是PM2造成的吗?

 由于之前服务器采用pm2守护启动,第一个想到的排查方向:

        使用正常的本地node 启动服务器,并查看内存快照。若使用node启动没问题,而使用pm2守护启动造成内存泄漏,则猜测有可能是pm2的daemon等或是其他pm2配置造成的

        于是将最新版本node拷贝到本地,并安装easy-monitor,对本地非pm2启动的服务器进行内存监控。

 监控结果如下:

 通过分析发现:

        在本地node index.js启动的服务器内存占用在20-30M之间,并没有出现部署时500M+的情况,于是我便在PM2仓库下检索与daemon相关的ISSUE,通过测试禁用daemon等方法后,❌仍然是非PM2启动不爆内存,但只要使用PM2启动内存就爆到500M+


二.罪魁祸首 node-cron

        在上一个方向排查无果后,我想到了另一个可能出现问题的地方。由于在本次上线的新功能中,导入了一个之前未使用过的node-cron

        本次上线的功能有如下需求:在每天指定时间段发出指定网络请求完成一些事情。

而node-cron是一个可以在node中进行任务调度的包。

调度的例子如下:


const cron = require("node-cron");
const successTask = cron.schedule(
  "55 59 19 * * *",
  () => {
    // 注册预约轮询器
    reserve
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值