X-Profiler / xprofiler

🌀An addon for node.js, which supporting output performance log and real-time profiling through sampling.
Other
426 stars 57 forks source link

Question: uv 中的active_handles 与process. _getActiveHandles() 数值对应不上 #186

Closed liSong5713 closed 2 years ago

liSong5713 commented 2 years ago

process._getActiveHandles()返回数据如下 [WriteStream, WriteStream, ReadStream, Socket, Socket, Server, Socket]

xprofiler 下返回的数据如下 active_handles: 4 active_file_handles: 0 active_and_ref_file_handles: 0 active_tcp_handles: 3 active_and_ref_tcp_handles: 3 active_udp_handles: 0 active_and_ref_udp_handles: 0 active_timer_handles: 1 active_and_ref_timer_handles: 1 通过nodejs 返回active_handles 为7个,xprofiler为4个.请问uv下数值为什么会产生差异呢

hyj1991 commented 2 years ago

你又不不能保证是同一瞬间调用的

liSong5713 commented 2 years ago

第一个问题: 代码中能确定的是有两个WriteStream的, 但是active_file_handles却没有反应出来。 第二个问题:active_tcp_handles 一直为3个,我又http请求并且debug 断点暂停,active_tcp_handles仍然3个。

还一个问题作者既然开源了,就保持一个开源的态度,提的issue请麻烦认真审视下再close.

legendecas commented 2 years ago

process._getActiveHandles() 返回的几个 stream 是 stdin/stdout/stderr,是 unref 状态的,在只剩下这几个 handle 时 loop 也会退出。部分 native handle 是不会在 process._getActiveHandles() 当中显示的,他们没有对应的 JS wrap object。非 ref 状态的 handle 不会在 xprofiler 当中被统计。

如果 debug 断点了 JS 线程,那么 xprofiler 数据就不会再更新了,直到 JS 线程断点恢复,所以如 @hyj1991 所说, TCP handle 的数量因为是不同时间点采集的和 process._getActiveHandles() 不一定能对齐的。

liSong5713 commented 2 years ago

@legendecas 感谢解惑