1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > node.js 内存泄露问题之解决

node.js 内存泄露问题之解决

时间:2021-10-10 12:15:58

相关推荐

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

如上,添加启动选项,将内存调大即可。

但是,这样并不能彻底解决。如果内存泄露的情况存在,除非定期重启进程,早晚仍然要达到限制值,还是会宕机。

因此,还是必须要找到根本解决办法,防范内存泄露。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。