我怎样才能确定这个过程已经打开?

我正在努力debugging一个我们的服务器进程在60-90天内消耗大量句柄的问题。 服务器父进程产生并循环许多孩子,每个孩子每小时回收一次。 家长的进程句柄计数将在两个月后上升到40k,但我不确定这些句柄引用的是什么。

使用ProcessExplorer,我可以看到句柄数和一些句柄(下面的图片是一个例子)。 但是,列出的手柄数量并不接近上方窗格中显示的40k数字。 我在手柄窗口中有大约100个条目,通过它们的属性,我可以用这个窗口占总处理器的3K左右,远远超过了总共40K。

我已经设置父母循环它的孩子每隔几分钟尝试,看看它是否与单车儿童有关,但监测一个小时似乎并没有导致父母进程处理计数上升任何。 在这段时间里它会升降,但不会boost。 无可否认,一个小时与两个月相差甚远,但这是一个开始。

我真的很感激一些方向,我怎样才能进一步解决这个问题。 不幸的是,这是我的一般知识之外,所以我有点失落。 任何协助将不胜感激确定可以包括这个句柄计数。

在这里输入图像说明

更新:根据下面的josh poley的build议,我使用Sysinternals的handle.exe来检查过程。 使用-a标志,我只有5个结果。 所以接下来我尝试了-s标志,它列出了所有进程中句柄的计数。 我跑了一次,然后重新启动受影响的服务器,并再次运行它。 突变处理类别大幅下降,这让我觉得我需要关注这个类别。 将研究

在这里输入图像说明

Process Explorer中的句柄视图不会显示所有可能的句柄类型(只是常用的句柄类型,它可以提供有用的细节)。

您应该使用handle.exe (也来自sysinternals集合)和-a选项结合进程ID,然后解析输出。 例:

 handle.exe -a -p 26916 >handle.out 

只需在我的盒子上随机选择一个进程,handle.exe显示795个EtwRegistration句柄,这些句柄在Process Explorer GUI中不显示。