process.getActiveResourcesInfo() を使うとイベントループに残ってる一覧を文字列で見れる

Welcome to Node.js v18.17.1.
Type ".help" for more information.
> console.log(process.getActiveResourcesInfo())
[ 'TTYWrap', 'TTYWrap', 'TTYWrap' ]
> setTimeout(() => {}, 10000)
> console.log(process.getActiveResourcesInfo())
[ 'TTYWrap', 'TTYWrap', 'TTYWrap', 'Timeout' ]

setTimeout を登録すると Timeout が追加された
setTimeout を複数登録すると 配列の中の Timeout が複数になる
残ってる非同期処理の数がわかるのでどれくらい負荷があるかの参考にできる

console.log(0, process.getActiveResourcesInfo())
console.log(1, process.getActiveResourcesInfo())

setTimeout(() => {}, 100)

console.log(2, process.getActiveResourcesInfo())

const timeout = setTimeout(() => {}, 100)

console.log(3, process.getActiveResourcesInfo())

timeout.unref()

console.log(4, process.getActiveResourcesInfo())

require("fs/promises").readFile(__filename)

console.log(5, process.getActiveResourcesInfo())
0 []
1 [ 'TTYWrap', 'TTYWrap' ]
2 [ 'TTYWrap', 'TTYWrap', 'Timeout' ]
3 [ 'TTYWrap', 'TTYWrap', 'Timeout', 'Timeout' ]
4 [ 'TTYWrap', 'TTYWrap', 'Timeout' ]
5 [ 'FSReqPromise', 'TTYWrap', 'TTYWrap', 'Timeout' ]

ファイル指定で実行すると最初は何も入ってなくて 2 回目からデフォルトのものが含まれる
unref すると active 扱いされなくなって一覧から消える

最初から入ってるものは OS や CJS/ESM でも違うみたい

console.log(0, process.getActiveResourcesInfo())
console.log(1, process.getActiveResourcesInfo())

これを実行すると

Windows の場合

D:\t12>node a.cjs
0 []
1 [ 'TTYWrap', 'TTYWrap' ]

D:\t12>node a.mjs
0 [ 'CloseReq' ]
1 [ 'CloseReq', 'TTYWrap', 'TTYWrap' ]

Linux の場合

root@426b4d5c3e42:/opt# node a.cjs
0 []
1 [ 'TTYWrap' ]

root@426b4d5c3e42:/opt# node a.mjs
0 [ 'CloseReq' ]
1 [ 'CloseReq', 'TTYWrap' ]

バージョンはどっちも Node.js 18

Windows だと TTYWrap が 2 つ入ってる
Linux だと 1 つ

REPL だと Windows も Linux も TTYWrap がもう一つ増える

ESM だと CloseReq が最初から入ってる
CJS だと入ってない