关于Node的内存泄漏简析
2017-12-14邵晨龙江雪
中国科技博览 2017年46期
邵晨龙++江雪
[摘 要]Node对内存泄漏十分敏感,一旦线上应用有成千上万的流量,哪怕是一个字节的内存泄漏也会造成堆积,垃圾回收过程中将耗费更多时间进行对象扫描,应用响应缓慢,直到进程内存溢出,应用崩溃。本文不仅分析了造成内存泄漏的原因,并介绍了几种主流的排查方案。
[关键词]Node 内存泄漏
中图分类号:TG294 文献标识码:A 文章编号:1009-914X(2017)46-0046-01
1 引言
内存泄漏通常产生于无意间,较难排查。尽管内存泄漏的情况不尽相同,但其实质只有一个,那就是应当回收的对象出现意外而没有被回收,变成了常驻在老生代中的对象。
2 引发内存泄漏的原因
通常,造成内存泄漏的原因主要有两个:缓存,队列消费不及时。
2.1 缓存
缓存在应用中的作用举足轻重,可以十分有效地节省资源。因为它的访问效率要比I/O的效率高,一旦命中缓存,就可以节省一次I/O的时间。
但是在Node中,缓存并非物美价廉。一旦一个对象被当作缓存来使用,那就意味着它将会常驻在老生代中。缓存中存储的键越多,长期存活的对象也就越多,这将导致垃圾回收在进行扫描和整理时,对这些对象做无用功。
另一个问题在于,JavaScript开发者通常喜欢用对象的键值对来缓存东西,但这与严格意义上的缓存又有着区别,严格意义的缓存有着完善的过期策略,而普通对象的键值对并没有。所以,在Node中,任何试图拿内存当缓存的行为都应当被限制。当然,这种限制并不是不允许使用的意思,而是要小心为之。……
登录APP查看全文