PerfMon 中相同 PID 的进程名称不同

PerfMon 中相同 PID 的进程名称不同

我正在尝试确认我看到的行为或正在寻求帮助来识别我的问题。

使用性能监视器收集同一进程的多个实例的数据时,同一个实例名称与不同的 PID 相关联。具体查看\.NET CLR Memory()\Process ID\Process()\ID Process值。

我发现该行为与 Microsoft Dynamics Nav Server 进程有关,在另一台服务器上重复了该行为,并使用 w3wp 进程在第 3 台服务器上重现了该问题。

这是预期的行为吗?

我是否错误地认为这两个值是相同的?

我的猜测是.NET 指标处理实例名称的方式与其他性能指标不同,但我没有找到支持这一理论的任何文档。


背景及如何复制

在尝试收集性能监视器数据以发送到我们的监控系统 (Zabbix) 时。由于PerfMon 处理多个实例在同一过程中,我使用 Powershell 脚本通过 PID 将友好名称转换为实例名称。然后,我使用收集到的实例名称从 PerfMon 中提取所需的指标,并使用友好名称将其报告回来。

以下 Powershell 命令为同一实例名称提供不同的进程 ID:

PS > (Get-Counter "\Process(microsoft.dynamics.nav.server#3)\ID Process").CounterSamples.CookedValue
3308
PS > (Get-Counter "\.NET CLR Memory(microsoft.dynamics.nav.server#3)\Process ID").CounterSamples.CookedValue
3324

microsoft.dynmaics.nav.server#3实例与 PID 3308 和 3324 相关联,具体取决于您拉取的指标。

我在另一台服务器上重复了 w3wp 的问题:

PS > (Get-Counter "\Process(w3wp#2)\ID Process").CounterSamples.CookedValue
5924
PS > (Get-Counter "\.NET CLR Memory(w3wp#2)\Process ID").CounterSamples.CookedValue
4396

w3wp#2实例与 PID 5924 和 4396 相关联。

我还直接在性能监视器中仔细检查了这些值。


我的解决方法是再次提取基于 .NET 的指标的实例名称,这样我就可以为我的流程找到解决方案。

我更想了解为什么这个问题需要这样做。

tl;dr; 微软是在欺骗我吗?

相关内容