Node.JS: Инструмент, чтобы увидеть, почему процесс все еще работает? - PullRequest
14 голосов
/ 06 мая 2011

Есть ли способ узнать, какие тайм-ауты, интервалы или асинхронные операции (или бесконечные циклы) все еще выполняются и мешают моему процессу завершиться?

Мне удалось выяснить это до сих пор без такихинструмент, но такой инструмент был бы очень удобен, особенно если учесть, что проекты Node.JS здесь начинают расти.

Я имею в виду Java kill -3, который печатает трассировку стека в stderr.Вы можете сделать это для любого процесса, в любое время, отладки или нет.Я хотел бы получить эквивалент для Node.JS.(Я знаю, что узел однопоточный с асинхронным, поэтому он будет выводить по-другому)

Ответы [ 2 ]

9 голосов
/ 15 мая 2016

Модуль почему работает узел - это именно то, что вам нужно.

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

А на выходе получается что-то вроде:

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 () {
6 голосов
/ 07 мая 2011

Размещен запрос функции https://github.com/joyent/node/issues/1025

...