20

Is there a way to see what timeouts, intervals or async operations (or endless loops) are still running and are stopping my process from ending?

I have been able to figure it out so far without such a tool, but such a tool would be very handy especially as the Node.JS projects here start to get bigger.

I am thinking of Java's kill -3 which prints a stack trace to stderr. You can do this for any process, any time, debug or no. I would like an equivalent for Node.JS. (I know that node is single threaded with async so it would output differently)

700 Software
  • 85,281
  • 83
  • 234
  • 341
  • 3
    I had a similar problem, are you running into this issue when running tests with some sort of database? For example, my unit tests when I was using mongodb would never exit because of the internal mongo timeouts/intervals. – kcbanner May 06 '11 at 19:44
  • @kcbanner: In MySQL, you have to end the connection before the process will do an auto exit. It may be the same in mongodb? Or did you already try that? – 700 Software May 06 '11 at 20:48
  • Yea, ending the connection fixes it. – kcbanner May 07 '11 at 18:00

1 Answers1

22

The module why-is-node-running is exactly the thing you need.

 var log = require('why-is-node-running')
 setTimeout(function () {
   log() // logs out active handles that are keeping node running
 }, 100)

And the output is something like:

There are 4 known handle(s) keeping the process running and 0 unknown
Known handles:
# Timer
/Users/maf/dev/node_modules/why-is-node-running/example.js:6  - setInterval(function () {}, 1000)
/Users/maf/dev/node_modules/why-is-node-running/example.js:10 - createServer()

# TCP
/Users/maf/dev/node_modules/why-is-node-running/example.js:7  - server.listen(0)
/Users/maf/dev/node_modules/why-is-node-running/example.js:10 - createServer()

# TCP
/Users/maf/dev/node_modules/why-is-node-running/example.js:7  - server.listen(0)
/Users/maf/dev/node_modules/why-is-node-running/example.js:11 - createServer()

# Timer
/Users/maf/dev/node_modules/why-is-node-running/example.js:13 - setTimeout(function () {
B T
  • 57,525
  • 34
  • 189
  • 207