![PerfMon 中相同 PID 的进程名称不同](https://linux22.com/image/719416/PerfMon%20%E4%B8%AD%E7%9B%B8%E5%90%8C%20PID%20%E7%9A%84%E8%BF%9B%E7%A8%8B%E5%90%8D%E7%A7%B0%E4%B8%8D%E5%90%8C.png)
我正在尝试确认我看到的行为或正在寻求帮助来识别我的问题。
使用性能监视器收集同一进程的多个实例的数据时,同一个实例名称与不同的 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; 微软是在欺骗我吗?