最新要闻
- 环球视讯!2020年“老卡”姗姗来迟:映泰突然推出RTX 3080/3070非公显卡
- 【全球聚看点】《原神》赚麻了!推出2年移动端收入超过275亿元
- 视讯!3人同时订酒店价格相差1倍 去哪儿回应:正常 因素有很多
- 环球看点!造车新势力第一!2022年埃安累计销量27.1万辆 明年冲击60万辆
- 全球观察:索尼音乐在B站传了17万个视频 网友:当免费服务器了
- 当前时讯:比亚迪技术加持 创维汽车2022年总销量21916台 暴增255.72%
- 天天日报丨复兴号新动车元旦首秀:红白灰绿四色机身成“网红”车型
- N95有效防护时间为4到6小时:和戴普通口罩效果有什么区别?
- 视焦点讯!RTX 4070 Ti完整规格、性能曝光:4090一半性能、一半的价格
- iPhone 15 mini重出江湖?苹果把这几个功能加上卖爆
- 世界热文:蒙脱石散为啥突然火了?医生提醒:不要乱用 小心便秘
- 环球关注:1月4日发布!一加11官宣搭载双环式对磁扬声器:支持杜比全景声
- 世界讯息:新能源补贴正式终止!小鹏宣布:2023年各车型售价与补贴后一致
- 今日热搜:岚图汽车12月交付1729辆 大增14.7%!全年累计交付19409辆
- 环球微速讯:《阿凡达2》成第100部内地票房破10亿电影:当年《阿凡达1》是第1部
- 今日看点:外观帅炸了!阿富汗首款国产跑车随风雪亮相喀布尔
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
动态焦点:一招轻松解决node内存溢出问题
(资料图片仅供参考)
node启动项目造成内存溢出的解决办法
我们在使用node启动项目的时在项目较大的时候,可能会造成内存溢出。为什么会造成内存溢出呢?要回答上面这个问题,我们要了解node中是如何分配内存的。Node中通过JavaScript使用内存时只能使用部分内存(64位系统:1.4 GB, 32位系统:0.7 GB)如果前端项目比较大,Webpack编译时就会占用很多的系统资源,此时一旦超出了V8引擎对Node默认的内存限制大小时,就会产生内存溢出的错误。在终端我们就会看见如下关键报错信息: <--- JS stacktrace ---><--- Last few GCs --->这些都表明内存溢出了。
详细报错信息
<--- Last few GCs --->[130124:0000021FC62BC9D0] 1795 ms: Scavenge 1762.7 (1796.8) -> 1762.6 (1796.8) MB, 34.4 / 0.0 ms (average mu = 1.000, current mu = 1.000) allocation failure[130124:0000021FC62BC9D0] 2409 ms: Mark-sweep 1922.7 (1956.8) -> 1922.0 (1956.1) MB, 487.4 / 0.0 ms (+ 38.4 ms in 10 steps since start of marking, biggest step 5.0 ms, walltime since start of marking 2053 ms) (average mu = 1.000, current mu = 1.000)<--- JS stacktrace --->FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory
解决内存溢出的办法
我们知道了内存溢出的原因:现在我们扩展内存就可以了.# linux & mac下面export NODE_OPTIONS=--max_old_space_size=8096# windows 下面 [window推荐使用这个] 你直接在命令行窗口CMD 中输入如下命令就ok了。set NODE_OPTIONS=--max_old_space_size=8096 # 使用cross-env解决mac 与 windows 的差异npm install --save-dev cross-env # 安装cross-env NODE_OPTIONS=--max_old_space_size=8096
了解几个属性
创建 look.js文件let neiCun = process.memoryUsage();console.log("内存大小:",neiCun); 输出内存大小: { rss: 19619840, heapTotal: 4481024, heapUsed: 2817824, external: 941362, arrayBuffers: 9898}属性名 说明rss 常驻集大小,是进程在主内存设备(即总分配内存的子集)中占用的空间量,包括所有 C++ 和 JavaScript 对象和代码。heapTotal V8 的内存使用量,已申请到的内存 单位是:BheapUsed V8 的内存使用量,当前已使用的内存 单位是:Bexternal 绑定到 V8 管理的 JavaScript 对象的 C++ 对象的内存使用量。arrayBuffers 为 ArrayBuffer 和 SharedArrayBuffer 分配的内存,包括所有 Node.js Buffer。 这也包含在 external 值中。 当 Node.js 被用作嵌入式库时,此值可能为 0,因为在这种情况下可能不会跟踪 ArrayBuffer 的分配 小知识:在浏览器的控制台中输入 window.performance 命令也可以查看内存
jsHeapSizeLimit totalJSHeapSize usedJSHeapSize 的讲解
在控制台输入 window.performance出现如下一部分的属性memory:{ jsHeapSizeLimit: 2172649472, totalJSHeapSize: 215072162, usedJSHeapSize: 211564498}这个几个属性的意思jsHeapSizeLimit: 2172649472 totalJSHeapSize: 629811769 usedJSHeapSize: 624884689 jsHeapSizeLimit 代表内存大小限制, 2172649472/1024/1024 ≈ 2072M,也就是2G,这也佐证了新的V8已经将内存从1.4G限制提升上来了。totalJSHeapSize 代表可使用内存 629811769/1024/1024 ≈ 600MusedJSHeapSize是JavaScript对象占用的内存,不能大于totalJSHeapSize,如果大于,可能出现了内存泄漏
变量何时销毁
内存中主要存储变量等数据:局部变量当程序执行结束,且没有引用时就会消失。全局对象回始终存活到程序结束运行
使用--max-old-space-size进行手动内存分配
function getMemory(n) { let memory = process.memoryUsage(); console.log(`申请到内存:${(memory.heapTotal/1024/1024).toFixed(1)}MB`); console.log(`已使用内存:${(memory.heapUsed/1024/1024).toFixed(1)}MB`); console.log(`--------------------循环了${n}次`)}// 每次都会接受一个大数组function useMem(){ let size = 20 * 1024 * 1024; let arr = new Array(size); return arr;}// 全局变量let total = [];for (let j = 0; j < 30; j++) { getMemory(j+1); total.push(useMem());}console.log("success");
发现的问题
根据上面的图:以上循环10次,是不会超出的,能正常输出success。当 循环15次,的时候内存就崩掉了。其中Last few GCs显示的是最后几次垃圾回收的情况,JS stacktrace代表JavaScript的堆栈跟踪。报错的原因是:JavaScript heap out of memory,达到堆限制分配失败-JavaScript堆内存不足.对于当前这种情况而言,就可以使用--max-old-space-size命令来扩充堆内存空间了,一般而言新生代内存空间扩充并没有多大必要,堆内存不足主要还是需要扩充老生代的内存。[重点]node运行js时添加:--max-old-space-size=8096 这可以将老生代内存空间扩充到 8096 MB。
简单介绍一下 V8 引擎的垃圾回收机制
v8 引擎将内存分为了新生代和老生代。新创建的对象或者只经历过一次的垃圾回收的对象被称为新生代。经历过多次垃圾回收的对象被称为老生代。新生的对象容易早死,老生代活得更久新生代被分为 From 和 To 两个空间。To 一般是闲置的,当 From 空间满了的时候会执行 Scavenge 算法进行垃圾回收。这个算法分为三步:1.首先检查 From 空间的存活对象,如果判断这个存活对象是否满足晋升到老生代的条件,满足条件则晋升到老生代,如果不满足条件则移动 To 空间。2.如果对象不存活,则释放对象的空间。3.最后将 From 空间和 To 空间角色进行交换
V8 新生代对象晋升到老生代有两个条件:
1.第一个是判断对象否已经经过一次 Scavenge 回收。若经历过,则将该对象从 From 空间复制到老生代中;若没有经历,则复制到 To 空间。2.第二个是 To 空间的内存使用占比是否超过限制。当对象从 From 空间复制到 To 空间时,若 To 空间使用超过 25%,则对象直接晋升到老生代中。设置 25% 的原因主要是因为算法结束后,两个空间结束后会交换位置,如果 To 空间的内存太小,会影响后续的内存分配。
使用--max-old-space-size命令来扩充堆内存空间
执行 node --max-old-space-size=8096 .\look.js
在分配内存时不能超过系统的空闲内存
注意: 在分配内存时需要注意系统空闲内存,不能超过系统的空闲内存。并且一般只能接受空闲内存的75%。可以使用导入os来进行查看。const os = require("os");let totalmem = os.totalmem(); // 以整数形式返回系统内存总量(以字节为单位B)let freemem = os.freemem(); // 以整数形式返回空闲的系统内存量(以字节为单位B)。console.log(`系统总内存:${ (totalmem/1024/1024).toFixed(1) },系统空闲内存:${ (freemem/1024/1024).toFixed(1) }`)
动态焦点:一招轻松解决node内存溢出问题
环球视讯!2020年“老卡”姗姗来迟:映泰突然推出RTX 3080/3070非公显卡
世界聚焦:PG认证的注意事项 (这很重要!)
【全球聚看点】《原神》赚麻了!推出2年移动端收入超过275亿元
视讯!3人同时订酒店价格相差1倍 去哪儿回应:正常 因素有很多
观天下!Django中间件
环球看点!造车新势力第一!2022年埃安累计销量27.1万辆 明年冲击60万辆
热头条丨Django组件之form组件
全球观察:索尼音乐在B站传了17万个视频 网友:当免费服务器了
当前时讯:比亚迪技术加持 创维汽车2022年总销量21916台 暴增255.72%
天天日报丨复兴号新动车元旦首秀:红白灰绿四色机身成“网红”车型
N95有效防护时间为4到6小时:和戴普通口罩效果有什么区别?
Django组件之Ajax请求
视焦点讯!RTX 4070 Ti完整规格、性能曝光:4090一半性能、一半的价格
新年快乐!今天遇到一个问题:3个鸡蛋5元,6个鸡蛋多少钱?
iPhone 15 mini重出江湖?苹果把这几个功能加上卖爆
世界热文:蒙脱石散为啥突然火了?医生提醒:不要乱用 小心便秘
今日快讯:关于使用boto3方式获取AWS-所有EC2-机型及属性时所遇到的结果返回不全的坑点及使用分布机制的解决方法
世界快讯:web项目开发---第三天
环球关注:1月4日发布!一加11官宣搭载双环式对磁扬声器:支持杜比全景声
世界讯息:新能源补贴正式终止!小鹏宣布:2023年各车型售价与补贴后一致
MAUI新生6.6-搜索栏SearchHandler
今日热搜:岚图汽车12月交付1729辆 大增14.7%!全年累计交付19409辆
每日焦点!得到跨年演讲2023
环球微速讯:《阿凡达2》成第100部内地票房破10亿电影:当年《阿凡达1》是第1部
Django模板层
今日看点:外观帅炸了!阿富汗首款国产跑车随风雪亮相喀布尔
《王者荣耀》盘古即将获得品质升级:上手难度大幅下降
每日短讯:跨年夜无人机被气球缠绕坠落人群 引发一阵惊呼
【世界热闻】从系统整体观思考系统构建
大年初一上映!《流浪地球2》微笑海报发布:主创全员出镜
2023全年油价调整时间表出炉:1月3日第一调 要涨
AcWing362. 区间
最新消息:你看过几场?2022年国内电影总票房超300亿
即时焦点:必囤:百草味年货坚果大礼包1370g/8袋仅49元
微速讯:特斯拉拼了:其他品牌车辆置换特斯拉 3.2万元功能免费用90天
全球首架国产大飞机C919新年首飞:验证飞行将达100小时
每日快看:全球最大第三方Android系统!基于Android 13的LineageOS 20正式发布
全球今头条!联想新款迷你主机M60Q官宣:厚度仅3.4厘米 可选12代i5
当前简讯:2023大事前瞻:杭州亚运会9月举办 首次纳入电竞比赛项目
热头条丨日本外卖小哥晒收入:月入合人民币5.5万元
观察:MYSQL安装教程及sqlyog初次使用
全球焦点!80秒看全球跨年烟火秀:用璀璨夜空迎接2023 你那能放烟花吗
【天天热闻】中国汽车保有量超3亿辆 千人拥有量达220辆 已成普通家庭消费品
搜索页上全是广告和推荐?用这插件一键去除
播报:新规即日起开始执行!手机预装App终于可以卸载了
苹果4GB内存为何能击败安卓12GB?历代iPhone内存容量公布:最大不过6GB
每日热议!铁路新规今日起施行:实名制儿童火车票将按照年龄购买 不看身高
焦点热讯:MAUI新生6.5-导航路由Navigation
每日资讯:Intel带着56核心再次发烧!新座驾降临 能插16条内存
环球头条:大批192号段诈骗电话出现!中国广电发布提醒:电商客服不会用192
热文:一项大奖的所有得主:都没有后代 为什么呢?
动态焦点:SpaceX预告2023年第一发:一箭114星!超越印度新纪录
要再见了!《魔兽世界》临时充值渠道将于1月1日0点正式关闭
詹姆斯生日夜狂砍47分!杜兰特盛赞其表现:神迹!
第119篇: JavaScript 类
天天速递!仅仅10年 中国在西部修了2.5万公里铁路
【天天聚看点】直播央视2023跨年晚会:明星阵容豪华、两大运动员登台
3999元 LG新款27英寸显示器开售:搭载4K Nano IPS Black屏
2423公里!曾经的中国西部最长铁路 开通60年了
焦点热门:妈妈给儿子读英语 发音如原声磁带!6岁孩子开口惊人
玩家吐槽《塞尔达传说:王国之泪》NS限定机太丑:希望不是真的
报道:屏幕碾压iPhone 14 Pro!红魔8 Pro系列20点开售:3999元起
今日快看!男子上公厕10分钟门自动打开:装了定时器 网友吐槽不合理
36个月流畅不卡顿!卢伟冰:Redmi 12C满足低预算人群核心需求
手工耿又出大作 自制小黄人悬空火炉 网友:有用、想要
世界微资讯!AcWing 1359. 洛谷P1457 城堡
LaTeX快速入门
【天天聚看点】早餐来一盒 伊利高端品牌金典纯牛奶24盒到手76元
世界报道:28年再温经典!周星驰电影《大话西游》元旦抖音全网独播
当前热讯:Python类的多态和多态性
当前观点:红绿灯倒计时覆盖量破百万 百度地图:全国3000县市只差1个没有
世界新消息丨“流氓软件”拜拜!手机预装App终于要能卸载了:新规明天执行
长城大气!魏牌官宣:国补取消后插混车型不涨价
马斯克疯狂省钱:断供厕纸、辞退保洁、退租办公室
Codeforces Good Bye 2022 CF 1770 A~E 题解
世界观天下!上调幅度2000到6000元!比亚迪宣布调整相关车型官方指导价
【环球热闻】今晚20点播出!央视跨年晚会阵容官宣:短道速滑运动员武大靖加盟
每日简讯:分布式排队叫号系统源码出售
口碑崩盘豆瓣评分跌至5.4!《三体》动画第五集上线你还追吗?
WPF 实现通知属性的N种方式
P3Depth: Monocular Depth Estimation with a Piecewise Planarity Prior
全球滚动:从USB存储设备启动树莓派
全球快看:满满维生素!可口可乐innocent果汁大促:三瓶券后不到15元
天天热门:长绒棉亲肤透气 浪莎男士中筒袜子5双21.55元
每日讯息!2023元旦档预售总票房破1亿元:《阿凡达2:水之道》第一
《王者荣耀》铠荣耀典藏皮肤今晚上线!三形态特效帅炸
头条:游戏火爆全球 海外营收过半!米哈游获评全国文化企业30强
快播:Unreal学习笔记1-打印输出
环球速读:史上财富损失第一人:马斯克财产缩水破人类记录
即时:官旗抄底:新疆大红乌苏啤酒500ml*12罐整箱59.9元
环球即时:沙特球队官宣C罗加盟 本人回应:是时候来亚洲分享经验了
一加11R外观泄露:双曲面屏、后置三摄
MySQL报错解决
当前观点:联想YOGA新款笔记本曝光:双屏显示、支持360度翻转
天天快资讯:0糖、0脂肪!Nevercoffee咖啡:10盒到手16.41元
天天快资讯丨兴泉铁路全线开通:8个老区终于坐上火车
【世界报资讯】电脑上没有“锤子大爆炸”:自己做一个!
环球快播:辽宁吉林多地现不明飞行物:外星飞船?还是韩国制造?
天天速讯:女子因上厕所未在工位被领导打:网友集体愤怒