因项目需要,要借用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 内存泄露问题之解决相关推荐

  1. 哪些操作会造成内存泄漏及Js内存泄露解决方法

    1.垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量.如果一个对象的 引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的 内存即可回收 2.setTim ...

  2. 有意思的 Node.js 内存泄漏问题

    作者:elvinpeng,腾讯 WXG 前端开发工程师 Node.js 使用的是 V8 引擎,会自动进行垃圾回收(Garbage Collection,GC),因而写代码的时候不需要像 C/C++ 一 ...

  3. js内存泄露 垃圾回收_Java内存体系结构(模型),垃圾回收和内存泄漏

    js内存泄露 垃圾回收 Java内存架构(Java内存模型) 上面是堆的Java内存模型以及Java虚拟机(JVM)中运行的任何Java应用程序的PermGen. 还提供了比率,以使您更好地了解如何在 ...

  4. 设置log缓存_全局变量、事件绑定、缓存爆炸?Node.js内存泄漏问题分析

    作者:elvinpeng,腾讯 WXG 前端开发工程师 Node.js 使用的是 V8 引擎,会自动进行垃圾回收(Garbage Collection,GC),因而写代码的时候不需要像 C/C++ 一 ...

  5. 梦魇java_[Java教程]魔鬼的梦魇—验证IE中的JS内存泄露模式(一)

    [Java教程]魔鬼的梦魇-验证IE中的JS内存泄露模式(一) 0 2012-05-08 07:00:04 随着移动互联网的发展,现在越来越多的应用开始想bs方向转移,原来很多复杂的计算逻辑也自然随着 ...

  6. 魔鬼的梦魇—验证IE中的js内存泄露模式(三)

    魔鬼的梦魇-验证IE中的js内存泄露模式(三) 按照Justin Rogers文章的顺序,接下来的这个模式应该是跨页内存泄露模式(cross-page leak),但是由于这个模式产生的中间对象,我们 ...

  7. Android开发中常见的内存泄露案例以及解决方法总结

    Android开发中常见的内存泄露案例以及解决方法总结 参考文章: (1)Android开发中常见的内存泄露案例以及解决方法总结 (2)https://www.cnblogs.com/shen-hua ...

  8. android inputmethodmanager内存泄露,InputMethodManager内存泄露现象及解决

    [Android][Memory Leak] InputMethodManager内存泄露现象及解决 现象: 在特定的机型天语k_touch_v9机型上,某个界面上出现InputMethodManag ...

  9. ATS插件开发中内存泄露问题的解决方法探讨

    接触ATS开发已经有几年了,开发过内核的模块,也从事过插件的开发.内存泄露问题一直是一个困扰大多数ATS开发者的头疼的问题,下面说说我自己的感受和思考.这里这关注ATS插件开发这个话题.源码的exam ...

最新文章

  1. quick-cocos2dx-2.2.4环境搭建
  2. mysql float的缺点 (不适用于高精度数据)
  3. Excel VBA 重要参考(原始的VBA代码)
  4. git学习2--提交和拉取代码
  5. 系统分析师资料_软考 系统分析师考试通过总结
  6. python数据类型_Python数据类型
  7. mysql 分组之后统计记录条数
  8. Julia : Some, something, Nothing
  9. RBF(径向基函数)神经网络
  10. hive sql 添加字段以及修改字段
  11. flutter 后台管理框架
  12. java se 知识点(一)
  13. 浏览器被劫持怎么办,详细讲解浏览器DNS被劫持的解决方法
  14. 什么是枚举?(个人理解)
  15. 同学们零基础入门学写代码的最佳途径之一哦
  16. android 仿QQ登陆界面实现
  17. 应用软件中如何实现多币种自动换算
  18. Django企业it资产管理系统
  19. 全网最全 Flutter 与 React Native 深入对比分析
  20. 什么是以太网,它在WiFi世界中的价值是什么?

热门文章

  1. Python PIL.Image模块:图片变更尺寸大小(宽x高)
  2. 无线网卡MT7601U驱动的移植
  3. Visa:的确向央行提交了银行卡清算机构申请 不过需要时间
  4. android 去重 比较两个list_Android 去除list集合中重复项的几种方法
  5. 计算机毕业设计(26)java毕设作品之家政服务预约系统
  6. 无限脉动:释放音乐和区块链在音乐领域的力量
  7. 分享一些缓解颈椎疼痛的方法
  8. 【QCC302x项目实战】两人对讲蓝牙耳机
  9. 怎么把桌面图标的名称的背景颜色变成透明
  10. 我的python世界下载_我的Python世界