当节点遇到内存不足错误时,有没有办法获得更长的堆栈跟踪?
<--- Last few GCs --->
39984 ms: Scavenge 594.7 (636.8) -> 594.7 (637.8) MB, 0.5 / 0 ms (+ 0.0 ms in 1 steps since last GC) [allocation failure] [incremental marking delaying mark-sweep].
40058 ms: Mark-sweep 594.7 (637.8) -> 382.8 (411.8) MB, 73.7 / 0 ms (+ 32.0 ms in 5 steps since start of marking, biggest step 32.0 ms) [last resort gc].
40096 ms: Mark-sweep 382.8 (411.8) -> 382.5 (409.8) MB, 38.0 / 0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 07985C51 <JS Object>
1: Join(aka Join) [native array.js:158] [pc=2CE5D269] (this=079080C9 <undefined>,p=351F00A9 <JS Array[34]>,v=34,C=249FA8A5 <String[1]: ,>,B=07976BD1 <JS Function ConvertToString (SharedFunctionInfo 07945515)>)
2: InnerArrayJoin(aka InnerArrayJoin) [native array.js:335] [pc=2CE5C475] (this=079080C9 <undefined>,C=249FA8A5 <String[1]: ,>,p=351F00A9 <JS Array[34]>,v=34)
3: join [native array....
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
仅显示堆栈跟踪的三行。有没有办法获得有关错误发生之前发生的事情的更多信息?
我已尝试过这些节点标志,但在这种情况下似乎没有帮助。
--trace_track_allocation_sites
--stack_trace_limit=40
--builtins_in_stack_traces
--stack_trace_on_illegal
在我接收和处理数据库错误(错误的sql,而不是我所关注的)之后的情况下,大约30秒后我出现了内存不足错误。据我所知,我的应用程序在这30秒内没有做任何事情。从客户端到服务器没有额外的调用(每次调用写入控制台),当我通过调试器运行时,在最后一步之后,30秒没有调试器在任何一行上断开(如果我等待或者如果我点击暂停)。
以上是来自Node 5.5.0。错误发生在0.12.9中,但该版本不会产生任何堆栈跟踪。节点4.2.6给出了相同的三级堆栈跟踪。