spa项目整体迁移转为ssr后,改动之后部署一切还好,就是突然有一天访问人数太多,node进程很容易就挂了自动重启。

  最后经过压力测试,考虑到是堆内存溢出的问题,就报错误:FATAL ERROR: CALL_AND_RETRY_0 Allocation failed – process out of memory

1、复现结果:

  采用Jmeter做压力测试,1s50次,持续请求,观察node进程占用内存情况

  经过观察发现持续请求,node进程占用内存一直升高,最后达到1.4G左右,就不会再升,因为64位系统默认分配给node进程的上线就是1.4G,32位系统好像是0.7G。

  达到1.4G之后,持续1/2分钟左右,进程就挂,报错堆内存溢出:FATAL ERROR: CALL_AND_RETRY_0 Allocation failed – process out of memory

2、解决过程

  起初一直不知道原因,由于之前一直有上篇报错:connect ECONNREFUSED 127.0.0.1:80错误解决,的问题,所以刚开始以为是这个拒绝导致大量连接堆积导致,所以先解决了上述问题。

  但是解决了上述问题之后,依然没有用,还是会报错。考虑到是页面的问题,所以换了一个纯静态页面请求,看是否因为页面代码的问题导致内存溢出,结果请求纯静态页面也是一样情况,这就不知道什么原因了。

  注意:其实这时候应该考虑到往上一层,去层层筛选,应该考虑进页面之前会有那些处理,比如nuxt里plugins,进页面之前就需要实例化这些东西。应该去考虑这些处理里面会不会导致内存泄漏。

  而我当时就是没有考虑到这一层,所以陷入了处理问题的盲区,只能考虑到使用工具去查询内存快照,然后再找那些地方出现内存泄漏点。

  后来考虑到上一层,所以就往plugins里去找,发现的确有内存泄漏的点,同样是因为整体迁移ssr,不是从0到1搭建重构,所以代码结构没有过多注意。我发现全局拦截器是引入的三方axios,那么每次拦截都会引入一次,导致大量的引用占用资源。问题找到,改掉之后,改为引用同一个三方资源,就没有问题了。然后把所有plugins里重复引用的资源都改为同一份引用,这样也可以减少一部分占用。

  改好之后,build,然后用Jmeter做压测,监控了100多万次样本检测,异常率很低0.1%,并且node进程不会上升了,占用内存稳定在200-250M之间,问题得到解决。

  记录一下主要是为了复盘一下解决问题的思路,因为解决问题的思路比解决问题的方法更重要:应该是从底层往上层,层层筛选,底层没问题,应该考虑紧邻它的上一层会不会有问题,这样就能快速定位,而我就是因为没有继续往上考虑一层,所以导致走了不少弯路。

nodejs内存溢出 FATAL ERROR: CALL_AND_RETRY_0 Allocation failed – process out of memory的更多相关文章

  1. egret编译 FATAL ERROR: CALL_AND_RETRY_0 Allocation failed process out of memory解决

    egret 白鹭编译时异常提示: FATAL ERROR: CALL_AND_RETRY_0 Allocation failed process out of memory.  编译时内存溢出, 因为 ...

  2. angular4 JavaScript内存溢出问题 (FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory)

    最近在写基于angular4的项目的时候,在build --prod的时候,突然措手不及的蹦出个报错,大致错误如下: 70% building modules 1345/1345 modules 0 ...

  3. 【nodejs】FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

    当使用大批量(>100)的SQL进行MySql数据库插值任务时,会发生以下错误: 总计将有371579条数据将被插入数据库 开始插入DB <--- Last few GCs ---> ...

  4. 解决 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 问题

    https://blog.csdn.net/weixin_41196185/article/details/81114226 今天在启动vue项目的时候报了这样一个错误 观察到关键词是 FATAL E ...

  5. FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

    vue项目 npm run dev 报错 WAIT Compiling...16:36:21 95% emittingFATAL ERROR: CALL_AND_RETRY_LAST Allocati ...

  6. node 打包内存溢出 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

    electron-vue加载了地图 openLayer后,打包就包内存溢出 解决办法: "build": "node --max_old_space_size=4096 ...

  7. Angular JavaScript内存溢出问题 (FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory)

    方法一和方法二参考:https://www.cnblogs.com/liugang-vip/p/6857595.html 方法一:my-project/node_modules/.bin 下增大内存( ...

  8. nodejs内存溢出

    npm-v 报错,错误信息如下: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScri ...

  9. 解决 VUE项目过大nodejs内存溢出问题

    今天在启动vue项目的时候报了这样一个错误, 如图所示:频繁出现此种情况,项目太大,导致内存溢出,排除代码问题外,可参照以下方式解决 // 全局安装increase-memory-limit npm ...

随机推荐

  1. 【生活现场】从打牌到map-reduce工作原理解析(转)

    原文:http://www.sohu.com/a/287135829_818692 小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了. 对小史面试 ...

  2. 使用 Python 获取 Windows 聚焦图片

    Windows 聚焦图片会定期更新,拿来做壁纸不错,它的目录是: %localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw ...

  3. 我是如何一步步编码完成万仓网ERP系统的(十一)产品库设计 7.发布商品

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  4. 解决Laydate在弹出层中一闪而过的问题

    解决办法:添加 trigger: 'click' 属性 laydate.render({ elem: '#demo' ,btns: ['clear', 'now'] ,trigger: 'click' ...

  5. 检测代码潜在bug和质量之SonarQube

    参数使用 项目分析参数可以在多个地方设置,继承关系如下: 全局分析参数,通过Web UI设置,作用于所有项目(配置–>通用–>通用中设置) 项目分析参数,通过WebUI设置,覆盖全局参数( ...

  6. 浅析负载均衡的6种算法,Ngnix的5种算法

    常见的几种负载均衡算法 1.轮询法 将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载. 2.随机法 通过系统的随机算法,根据后端服务器的 ...

  7. Spring事务源码解析(二)获取增强

    在上一篇文章@EnableTransactionManagement注解解析中,我们搭建了源码阅读的环境,以及解析了开启Spring事务功能的注解@EnableTransactionManagemen ...

  8. 如何做一个跨平台的游戏App?

    如何做一个跨平台的游戏App? iOS和安卓系统上的应用程序,根据提供的内容不同,按照开发方式和用户体验不同,可区分为app和游戏: 首先从开发方式不同来说明,app开发一般是用操作系统官方提供的开发 ...

  9. python打印带颜色字体

    设置颜色开始 :\033[显示方式;前景色;背景色m 前景色 背景色 颜色 30 40 黑色 31 41 红色 32 42 绿色 33 43 黃色 34 44 蓝色 35 45 紫红色 36 46 青 ...

  10. XGBoost使用教程(与sklearn一起使用)二

    一.导入必要的工具包# 运行 xgboost安装包中的示例程序from xgboost import XGBClassifier # 加载LibSVM格式数据模块from sklearn.datase ...