nodejs内存溢出 FATAL ERROR: CALL_AND_RETRY_0 Allocation failed – process out of memory

  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之间,问题得到解决。

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

原文地址:https://www.cnblogs.com/goloving/p/11441054.html

时间: 2024-10-10 09:44:41

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

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 build/build.js" ``` 直接在 node 后面写上 --max_old_space_size=4096 就好了,我这里设置的内存大小是4G,这个具体的大小可以根据自己的项目情况来设置就好了.然后再重新运行 npm run build 就可以正常打包构建了. 原文: https

nodejs内存溢出解决方法

解决方案一:通过 package.json 中的 "pro" 加大内存 解决方案二:使用 increase-memory-limit 插件,增加node服务器内存限制 "dependencies":{ "increase-memory-limit":"^1.6.0" } "script":{ "fix-memory-limit":"cross-env LIMIT=8000 in

node 内存溢出的解决方案

工作开发项目中,运行一个项目,因为项目过大,项目报错: FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory 查询可知是node内存 溢出导致,解决方案 1.安装increase-memory-limit 插件,增加node服务器内存限制 2. "scripts": { "start": "node --max_old_space_size=9000 build

webpack 内存溢出 Allocation failed - JavaScript heap out of memory

项目中,当组件文件过多,webpack-dev-server 编译时,容易内存溢出, 在 \node_modules\.bin\webpack-dev-server.cmd 加以下红色配置,暂可解决 @IF EXIST "%~dp0\node.exe" ( "%~dp0\node.exe" "--max_old_space_size=4096" "%~dp0\..\[email protected]@webpack-dev-server

VS 2017 Git failed with a fatal error的解决办法

前几天,满怀欣喜的从VS2015更新到了VS2017,经过这几天的试用,整体来说感觉还是挺不错的.昨天推送项目到远程服务器的时候,发现出现了推送失败的错误,错误如图: 按照提示,我看到输出窗口的输入内容如下: 当时以为更换了VS导致了ssh key丢失,重新输入密码验证一下就可以了,于是开始想办法找输入密码的地方. 经过一番折腾寻找,发现点击操作的时候,出现如下菜单: 这里我们选择"打开命令提示符"菜单,打开了命令提示符,输入提交到远程命令: git push origin maste

Symfony没有安装依赖_PHP Fatal error: require(): Failed opening required

$ php bin/console server:run PHP Warning: require(D:\home\workspace\pd\app/../vendor/autoload.php): failed to open stream: No such file or directory in D:\home\workspace\pinda\pin da\app\autoload.php on line 7 PHP Fatal error: require(): Failed openi

PHP message: PHP Fatal error: require(): Failed opening required

PHP message: PHP Warning: require(/data/wwwroot/blog.sgfoot.com/bootstrap/autoload.php): failed to open stream: Operation not permitted in /data/wwwroot/blog.sgfoot.com/public/index.php on line 22PHP message: PHP Fatal error: require(): Failed openin

zabbix报错listener failed: zbx_tcp_listen() fatal error: unable to serve on any address

I'm trying to install zabbix on a new (virtual) server. But i have troubles with the zabbix_agentd on the zabbix server. I get the error below and don't know how to fix it... Can someone help me out or point me in the correct direction? Error logging

pip错误-failed to create process/fatal error in launcher

问题: failed to create process/fatal error in launcher 解决: python2 -m pip install --upgrade pip python -m pip install --upgrade pip 原文地址:https://www.cnblogs.com/hankleo/p/10358548.html