I ran my app with the --trace_gc flag to attempt to find some performance issues. Well, it looks like I might have found it...
1288678 ms: Mark-sweep 498.8
There are not really any tools for this, but I can assure you that cyclic references are not the problem.
I wonder which version of V8 you are using.
One thing that can cause long pauses is very large objects. V8 is not yet very good at incrementalizing the scanning of multi-million element arrays or objects with hundreds of thousands of objects.
You may want to switch off idle notifications in node or with --nouse-idle-notification. I am not sure the notifications are always firing at the right time. They can tell V8 that the VM has nothing to do and now would be a good time to do non-incremental stop-the-world GC.