【读书笔记】《深入浅出nodejs》第五章 内存控制
海量请求+长时间运行 -> 内存控制 -> 一切资源高效循环利用
1. V8的垃圾回收机制与内存限制
在Node中通过JavaScript使用内存时,只能使用部分内存(64位系统下约1.4GB,32位系统下约为0.7GB)。
在V8中,所有的JavaScript对象都是通过堆来进行分配的,当申请的堆空闲内存不够分配新的对象,将继续申请堆内存,直到堆得大小超过V8的限制为止。
为什么V8要限制堆得大小?
-> (1)V8最初为浏览器设计,不太可能遇到用大量内存的场景。
-> (2)V8的垃圾回收机制限制。(1.5GB的垃圾回收堆内存,需要大约50毫秒以上,这使得应用性能和响应能力会直线下降)
突破V8限制:
-> $node --max-old-space-size = 1700 (单位MB) or
-> $node --max-new-space-size =1024 (单位KB)
V8的垃圾回收机制 ---- 分代式垃圾回收机制
查看垃圾回收机制 ---- $node --trace_gc -e "var a = [];for (var i=0; i<1000000; i++) a.push(new Array(100));" > gc.log
2. 高效使用内存
(1)了解作用域
(2)了解闭包
无法立即回收的内存有:
->闭包
->全局变量引用
因此,要小心此类变量的无限制添加
3. 内存指标
--会存在一些我们认为会回收但是却没有被回收的对象,这会导致内存占用无限增长。一旦增长达到V8内存限制,将会得到内存溢出错误,进而导致进程退出。
(1)查看内存使用情况 -> $node >process.memoryUsage() {
{
rss (resident set size 进程的常驻内存部分):132852672, (除此外,内存其余部分在交换区(swap)或文件系统(filesystem)中)
heapTotal(堆中总共申请的内存量) :6131200,
heapUsed(目前堆中使用中的内存量):2757120,
}
(2)查看系统内存占用
-> $node >os.totalmem() “系统的总内存”
-> $node >os.freemem() “系统的闲置内存”
(3)堆外内存
受V8的垃圾回收限制的主要是V8的堆内存。
4. 内存泄漏
造成内存泄漏的原因:
(1)缓存
(2)队列消费不及时
(3)作用域未释放
5. 内存泄漏排查
使用常见工具:
(1)node-heapdump
(2)node-memwatch
6. 大内存应用
【读书笔记】《深入浅出nodejs》第五章 内存控制的更多相关文章
- 《深入浅出Node.js》第5章 内存控制(未完)
@by Ruth92(转载请注明出处) 第5章 内存控制 基于无阻塞.事件驱动建立的 Node 服务,具有内存消耗低的优点,非常适合处理海量的网络请求. 内存控制正是在海量请求和长时间运行的前提下进行 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 代码工程地址: https://g ...
- Unity Shader入门精要读书笔记(一)序章
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...
- The Art of Multiprocessor Programming读书笔记 (更新至第3章)
这份笔记是我2013年下半年以来读“The Art of Multiprocessor Programming”这本书的读书笔记.目前有关共享内存并发同步相关的书籍并不多,但是学术文献却不少,跨越的时 ...
- UNP学习笔记(第十五章 UNIX域协议)
UNIX域协议是在单个主机上执行客户/服务器通信的一种方法 使用UNIX域套接字有以下3个理由: 1.UNIX域套接字往往比通信两端位于同一个主机的TCP套接字快出一倍 2.UNIX域套接字可用于在同 ...
- WPF,Silverlight与XAML读书笔记第四十五 - 外观效果之模板
说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. 模板允许用任何东西完全替换一个元素的可视树, ...
- ArcGIS API for JavaScript 4.2学习笔记[11] 官方第五章Popups(弹窗)概览与解释
直接跳过第三第四章了,第三章Layer和第四章可视化,怎么说呢,Layer是组织数据的,是Map的属性之一.可视化属于符号化编程,暂时不看. 第五章是对数据.结果的显示,类似于alert()..NET ...
- 【读书笔记】《深入浅出nodejs》第二章 模块机制
1.什么是模块? 指在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分. ----<百度百科> 2.JavaScr ...
- 【读书笔记】《深入浅出nodejs》第一章 Node简介
1. Node的官方网站: http://nodejs.org 2. Node的缘起: Ryan Dahl 打算设计一个高性能的Web服务器. Ryan Dahl 认为设计高性能Web服务器的要点在于 ...
随机推荐
- 160412、DWR使用笔记
DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码.它的实现是基于ajax的,可以实现无刷新效果. 网上有不少DWR的例子,但大都 ...
- Spring的Bean的生命周期以及Bean的后置处理器
Bean的生命周期: Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. Spring IOC 容器对 Bean 的生命周期进 ...
- FTP服务工作原理
1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的基础,它由一系列规格说明文 ...
- iros2016-Monday 10/10/2016
Workshop Day Integrating Multiple Knowledge Representation and Reasoning Techniques in Robotics (MIR ...
- Centos locate 文件搜索命令(十一)
locate命令 locate 文件名 在后台数据库中按文件名搜索,搜索速度更快 /var/lib/mlocate #locate命令所搜索的后台数据库 updatedb 更新数据库 locate搜索 ...
- sqlserver表结构查询语句
SELECT syscolumns.name,systypes.name,syscolumns.isnullable,syscolumns.length FROM syscolumns, systyp ...
- SVM支持向量机总结
一.拉格朗日乘子法 一般,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件.这里我们先介绍拉格朗日乘子法,后面再介绍KKT条件. 比如考虑下面的组合优化的问题, 这是一个带等式约束的优化 ...
- MySQL5.7密码安全策略(转)
环境介绍:CentOS 6.7 MySQL版本:5.7.11 1.查看现有的密码策略 mysql> SHOW VARIABLES LIKE 'validate_password%';参数解释:1 ...
- 打开的文件符合PDF/A标准,且已在只读模式下打开,以防被修改
PDF/A是一种用于长期归档和保留电子文档的ISO标准.您扫描到PDF的文档符合PDF/A的规范.您可以指定是否要用本查看模式查看文档. PDF/A 问题提示:“打开的文件符合PDF/A标准,且已在只 ...
- Java CodeFormatter
设置Formatter模板的入口: Window->Preference->Java->Code Style->Code Formatter <?xml version= ...