Thank you for your input, Forrest.
> You're never ending / destroying / disposing any of the responses,
> so they're just piling up inside the callback closures.
In foo1, there is a "return" statement immediately after the asynchronous
setTimeout(foo1,0);
so i would assume the responses are marked as GC-able after the return from the
callback closure.
Therefore, i think the real culprit here is that setTimeout(foo1,0) never lets
go of the next tick so GC never gets a chance to kick off. Is that so?
Thanks.
On Wednesday, August 21, 2013 11:22:06 PM UTC-4, ming wrote:
>
> Hi,
> My node.js program crashed and i saw the following in the log:
> FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory
>
> i reduced the original program to the following tiny self-contained program:
>
> =============================
> ...
>
> function foo1()
> {
> var someBadURI = ...;
>
> http.get
> (
> someBadURI,
> function(res)
> {
> if (res.statusCode != 200)
> {
> util.log("!!!!! bad ....");
> setTimeout(foo1,0);
> return;
> } ...
> }
> ) ...
> }
>
> foo1();
> =============================
>
> If i let the program above run long enough (~30 minutes or more), the process
> ran out of memory then crashed with the aforementioned error message but it
> is not clear to me why:
> FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory
>
> However, the following program has been running for days without any problem:
>
> =============================
> function foo2()
> {
> util.log("entering foo2");
> setTimeout(foo2,0);
> util.log("leavinging foo2");
> }
>
> foo2();
> =============================
>
> Why is that? Should the V8 engine register the event and invoke the
> callback/handler constantly with 0-wait setTimeout? Why would it consume a
> lot of memory?
>
> My guess is
> * memory has been allocated for the http.get call in foo1.
> In foo2, there is only log printing which does not really consume any
> resource (memory in this case)
>
> * the call
> setTimeout(foo,0);
> in foo1 always grabs the next tick so the GC never gets a chance to run
>
> Am i way off? i'm unsure if i need to yank in scoped, handle, context, etc.
> into my reasoning though for a better description.
>
> Thanks.
>
>
--
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.