node.js 内存泄露问题之解决
因项目需要,要借用node.js 作为 js引擎,解析动态生成的 js 语句,并将结果返回给调用者。因此,基于nodes.js ,实现了一个简单的 httpserver,针对请求,生成动态js 语句,然后使用 eval 执行之。
但是,问题来了。在某个项目中,大致一周多的时间,node.js 进程就会宕机一次,日志里报告以下信息:
<--- Last few GCs --->[16056:0x434dab0] 2156292597 ms: Mark-sweep 1275.4 (1456.3) -> 1274.4 (1456.3) MB, 143.2 / 0.0 ms (average mu = 0.135, current mu = 0.002) allocation failure GC in old space requested
[16056:0x434dab0] 2156292797 ms: Mark-sweep 1278.0 (1456.3) -> 1276.0 (1456.3) MB, 180.2 / 0.0 ms (average mu = 0.115, current mu = 0.097) allocation failure GC in old space requested<--- JS stacktrace --->==== JS stack trace =========================================0: ExitFrame [pc: 0x1f36196841bd]
Security context: 0x4d7e551e6c9 <JSObject>1: test [0x4d7e550d3b9](this=0x239f406b0319 <JSRegExp <String[37]\: .*(\x7535\x8bdd|\x53f7\x7801|\x624b\x673a\x53f7).{0,3}\x6211.{0,2}((\x4e70|\x65b0\x529e)\x7684).*>>,0x239f406b10b1 <String[19]\: \x554a\x6211\x5df2\x7ecf\x5230\x4f60\x4eec\x8425\x4e1a\x5385\x4e5f\x529e\x8fc7\x4e86\x8425\x4e1a\x5385\x91cc\x9762>)2: checkScriptIsMultiLineRegExp(aka che...FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
可知,是GC的时候失败了,内存超过了预设的 1456.3MB 的大小,因此程序抛出异常,罢工了。
翻阅资料可知,默认情况下 node.js 的内存设置大小为 1.4GB。
因此,要解决这个问题,看起来是比较简单的,即更改这个内存限制大小即可:
node --max_old_space_size=4096 ./httpserver.js
如上,添加启动选项,将内存调大即可。
但是,这样并不能彻底解决。如果内存泄露的情况存在,除非定期重启进程,早晚仍然要达到限制值,还是会宕机。
因此,还是必须要找到根本解决办法,防范内存泄露。
node.js 内存泄露问题之解决相关推荐
- 哪些操作会造成内存泄漏及Js内存泄露解决方法
1.垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量.如果一个对象的 引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的 内存即可回收 2.setTim ...
- 有意思的 Node.js 内存泄漏问题
作者:elvinpeng,腾讯 WXG 前端开发工程师 Node.js 使用的是 V8 引擎,会自动进行垃圾回收(Garbage Collection,GC),因而写代码的时候不需要像 C/C++ 一 ...
- js内存泄露 垃圾回收_Java内存体系结构(模型),垃圾回收和内存泄漏
js内存泄露 垃圾回收 Java内存架构(Java内存模型) 上面是堆的Java内存模型以及Java虚拟机(JVM)中运行的任何Java应用程序的PermGen. 还提供了比率,以使您更好地了解如何在 ...
- 设置log缓存_全局变量、事件绑定、缓存爆炸?Node.js内存泄漏问题分析
作者:elvinpeng,腾讯 WXG 前端开发工程师 Node.js 使用的是 V8 引擎,会自动进行垃圾回收(Garbage Collection,GC),因而写代码的时候不需要像 C/C++ 一 ...
- 梦魇java_[Java教程]魔鬼的梦魇—验证IE中的JS内存泄露模式(一)
[Java教程]魔鬼的梦魇-验证IE中的JS内存泄露模式(一) 0 2012-05-08 07:00:04 随着移动互联网的发展,现在越来越多的应用开始想bs方向转移,原来很多复杂的计算逻辑也自然随着 ...
- 魔鬼的梦魇—验证IE中的js内存泄露模式(三)
魔鬼的梦魇-验证IE中的js内存泄露模式(三) 按照Justin Rogers文章的顺序,接下来的这个模式应该是跨页内存泄露模式(cross-page leak),但是由于这个模式产生的中间对象,我们 ...
- Android开发中常见的内存泄露案例以及解决方法总结
Android开发中常见的内存泄露案例以及解决方法总结 参考文章: (1)Android开发中常见的内存泄露案例以及解决方法总结 (2)https://www.cnblogs.com/shen-hua ...
- android inputmethodmanager内存泄露,InputMethodManager内存泄露现象及解决
[Android][Memory Leak] InputMethodManager内存泄露现象及解决 现象: 在特定的机型天语k_touch_v9机型上,某个界面上出现InputMethodManag ...
- ATS插件开发中内存泄露问题的解决方法探讨
接触ATS开发已经有几年了,开发过内核的模块,也从事过插件的开发.内存泄露问题一直是一个困扰大多数ATS开发者的头疼的问题,下面说说我自己的感受和思考.这里这关注ATS插件开发这个话题.源码的exam ...
最新文章
- quick-cocos2dx-2.2.4环境搭建
- mysql float的缺点 (不适用于高精度数据)
- Excel VBA 重要参考(原始的VBA代码)
- git学习2--提交和拉取代码
- 系统分析师资料_软考 系统分析师考试通过总结
- python数据类型_Python数据类型
- mysql 分组之后统计记录条数
- Julia : Some, something, Nothing
- RBF(径向基函数)神经网络
- hive sql 添加字段以及修改字段
- flutter 后台管理框架
- java se 知识点(一)
- 浏览器被劫持怎么办,详细讲解浏览器DNS被劫持的解决方法
- 什么是枚举?(个人理解)
- 同学们零基础入门学写代码的最佳途径之一哦
- android 仿QQ登陆界面实现
- 应用软件中如何实现多币种自动换算
- Django企业it资产管理系统
- 全网最全 Flutter 与 React Native 深入对比分析
- 什么是以太网,它在WiFi世界中的价值是什么?