2016-05-29 46 views
0

我正在使用永远JS来连续运行我的节点JS服务器,但偶尔服务器崩溃并且网站停机一段时间。节点JS进程内存不足

我看着永远的记录,在这里它显示:

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory 

<--- Last few GCs ---> 

35251732 ms: Mark-sweep 687.6 (219898.0) -> 687.6 (527360.0) MB, 13522.0/0 ms [allocation failure] [scavenge might not succeed]. 
35267178 ms: Mark-sweep 687.6 (527360.0) -> 687.6 (940128.0) MB, 15445.8/0 ms [allocation failure] [scavenge might not succeed]. 
35282842 ms: Mark-sweep 687.6 (940128.0) -> 687.6 (1352896.0) MB, 15664.3/0 ms [last resort gc]. 
35298326 ms: Mark-sweep 687.6 (1352896.0) -> 687.6 (1765664.0) MB, 15483.8/0 ms [last resort gc]. 


<--- JS stacktrace ---> 

==== JS stack trace ========================================= 

Security context: 0x82f80fa5a91 <JS Object> 
    2: decode(aka utf8decode) [/home/ubuntu/chat2/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/utf8.js:~200] [pc=0x19db242bd813] (this=0x1ea709fcc4c9 <an Object with map 0xedc29877b11>,byteString=0x1bd8952f0461 <Very long string[8570662]>) 
    3: decodePacket [/home/ubuntu/chat2/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-... 

error: Forever detected script was killed by signal: SIGABRT 
error: Script restart attempt #9 
Server running at http://localhost:1337/ 

这里有一些错误,我在我的console.log文件中找到导致节点崩溃:

error: Forever detected script was killed by signal: SIGKILL 
error: Script restart attempt #11 


Error: read ECONNRESET 
    at exports._errnoException (util.js:870:11) 
    at TCP.onread (net.js:544:26) 

RangeNotSatisfiableError: Range Not Satisfiable 
    at SendStream.error (/home/ubuntu/chat2/node_modules/express/node_modules/connect/node_modules/serve-static/node_modules/send/index.js:245:31) 
    at SendStream.send (/home/ubuntu/chat2/node_modules/express/node_modules/connect/node_modules/serve-static/node_modules/send/index.js:564:19) 
    at onstat (/home/ubuntu/chat2/node_modules/express/node_modules/connect/node_modules/serve-static/node_modules/send/index.js:624:10) 
    at FSReqWrap.oncomplete (fs.js:82:15) 

任何想法关于如何解决这个问题?我似乎无法找到错误?

+0

我想,你应该寻找内存泄漏 –

+0

@AlexeyTen我已经调查了内存泄漏,你能指导我如何解决内存泄漏问题?我在问题中添加了更多错误日志,您可能会看到。 – Faizan

+0

这个链接应该很好启动https://www.google.com/search?q=nodejs+debug+memory+leak –

回答

2

你可以尝试增加节点JS使用该内存限制,

节点--max_old_space_size = 8192 --optimize_for_size --max_executable_size = 4096 --stack_size = 4096

您可以使用它像这样:

节点--max_old_space_size = 8192 --optimize_for_size --max_executable_size = 4096 --stack_size = 4096 yourfile.js

+0

我们在这里谈论哪些内存?应用程序运行期间由Node JS使用的服务器内存?它会对我的托管账单产生不利影响吗?我的应用程序位于AWS EC2上。 你能告诉我我必须在终端上运行这个命令吗?因为我现在正在永远使用我的节点应用程序。有没有办法permanaentyl增加默认的内存? – Faizan

+0

你可以像这样使用它永久启动-c“--max_old_space_size = 8192 --optimize_for_size --max_executable_size = 4096 --stack_size = 4096”yourfile.js –

+0

我试过了和你说的完全一样的命令永远启动-c“ - -max_old_space_size = 8192 --optimize_for_size --max_executable_size = 4096 --stack_size = 4096“index.js 它给消息永久进程运行,但我的网站仍然关闭。但是,当我用永远启动index.js的时候它就可以工作。 是什么导致它不能使用命令参数? plz帮助 – Faizan