所有同名进程的性能计数器?

Posted

技术标签:

【中文标题】所有同名进程的性能计数器?【英文标题】:Performance Counters for all processes with same name? 【发布时间】:2011-10-08 00:18:16 【问题描述】:

我目前正在我的 Windows 系统上运行 nginx,并且正在制作一个小控制面板来显示我的 Web 服务器的统计信息。

我正在尝试获取进程的 CPU 使用率和内存使用率的性能计数器,但 nginx 显示为多个进程,根据配置文件中的设置,它可以在 2 到 5 之间变化。我的设置显示两个进程,所以 nginx.exe 和 nginx.exe

我知道要使用哪些性能计数器,% Processor TimeWorking Set - Private,但我如何才能获得两个进程的单独值,以便将它们加在一起以获得最终值?

我尝试使用在Waffles question 找到的代码,但它只能输出两个进程中第一个进程的值。

谢谢。

编辑 - 工作代码

for (int i = 0; i < instances.Length; i++)
                    
                        //i = i + 1;
                        if (i == 0)
                        
                            toPopulate = new PerformanceCounter
                                ("Process", "Working Set - Private",
                                 toImport[i].ProcessName,
                                 true);
                        
                        else
                        
                            toPopulate = new PerformanceCounter
                                ("Process", "Working Set - Private",
                                 toImport[i].ProcessName + "#" + i,
                                 true);
                        

                        totalNginRam += toPopulate.NextValue();

                        instances[i] = toPopulate;
                    

【问题讨论】:

【参考方案1】:

查看该问题的公认答案。尝试运行perfmon。具有相同名称的进程将被标识为 process#1process#2 等。在您的情况下,它可能是 nginx#1nginx#2 等。

编辑:

您需要将实例名称传递给适当的constructor overload 或InstanceName 属性。根据this,看起来正确的格式是使用下划线。所以,process_1process_2

【讨论】:

如果是 nginx#2 我怎么能选择它作为标识符? 感谢您的信息。我会在我处理应用程序后尝试一下。 是的,更改实例名称有效,我已经用更新的工作代码更新了我的问题,供任何想要查看的人使用。【参考方案2】:

在使用 Azure Log Analytics 时,可以指定路径如

Process(nginx*)\% Processor Time

这似乎是在随时从所有匹配通配符模式的进程中收集数据。我可以确认它从新进程中获取数据(在更改设置后开始)并且它不会从“死”进程中获取数据。但是,InstanceName(例如nginx#3)可能会被重复使用,因此很难判断一个进程何时被一个新进程“替换”。

我无法在性能监视器中执行此操作。最接近的方法是在“添加计数器”对话框的搜索框中键入“nginx*”,然后选择&lt;All searched instances&gt;。这将为每个进程创建一个计数器,并且不会在进程启动或停止时动态添加或删除计数器。

也许可以使用通过 PowerShell 创建的数据收集器集来完成。但是,即使您能够在实例部分设置带有通配符的路径,也不能保证它会按照您的预期运行(即自动从所有正在运行的进程中自动收集数据)。

【讨论】:

以上是关于所有同名进程的性能计数器?的主要内容,如果未能解决你的问题,请参考以下文章

Windows性能计数器配置应用

在 c# 中从 W3wp 获取性能计数器

获取 C 中的进程性能计数器

性能计数器实例名称与进程名称

即使进程没有退出,进程的性能计数器实例名称是不是可以更改

当前进程的性能计数器的竞争条件