Node 服务内存告警,如何限制node服务的内存占用,node按内存自动重启

记一次生产环境内存告警问题
有一个专门用来画图的nodejs服务器, 一直一下运作得都好好的(通过pm2守护node的运行0, 今天突然收到这个服务所在的服务器的内存告警, 故又如下排查

问题排查

机器环境是8g的运行内存, centos服务器, 只部署了这一个应用, 按理说应该足够了, 我看了下每次请求才占用10几m的内存

使用postman并发请求

postman可以将整个collection中的接口打包发送, 并设置延时和重复次数
postman持续请求画图服务

分析

发现内存占用并不高, 我并发了100个请求, 内存也就占用不到2g, 想着会不会是别的什么操作导致的内存告警…
过了一会发现问题了, 我请求完成后内存占用并没有下来, 闲置了几分钟发现还是这样

网上查询发现, node使用的v8引擎是基于浏览器使用的, 正常情况下并不会占用这么多的内存, 最主要的是没有主动的内存释放操作…

解决方案

找到问题所在就好办了, 不会主动释放内存, 那就只好人工手动释放了

研究发现可以利用pm2来管理node服务的内存

pm2 有个0秒停机重载的机制, 重启服务连接不会丢

1. 首先需要了解下pm2的一些基础命令

  • pm2 start xxx: 启动xxx
  • pm2 list: 列出所有pm2管理的进程(包裹中止和异常的)
  • pm2 log: 查看启动系统的滚动日志
  • pm2 monit: 监视器可以看到服务的资源占用, 日志等

2. 编写启动脚本

启动交不了是json格式的文件, 取名为startNode.json

[{
  "name": "nodejs 画图服务",
  "args": "",
  "script": "./post.js",
  "exec_interpreter": "/usr/local/bin/node",
  "exec_mode": "fork",
  "max_memory_restart": "400M"
}]

3. 启动服务并观察

使用命令以配置文件的设置启动
pm2 start startNode.json
pm2监视器
再开200个请求模拟发现当内存超过一定阈值就会重启(也不是刚好400m会超过一些), 然后内存就释放
重启次数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值