我目前正在Windows系统上运行nginx,并且正在制作一个小控制面板来显示我的网络服务器的统计信息。
我正在尝试获取进程的CPU使用率和内存使用率的性能计数器,但是nginx显示为多个进程,根据配置文件中的设置,它可以在2-5之间变化。我的设置显示了两个进程,所以nginx.exe和nginx.exe
我知道要使用哪些性能计数器,% Processor Time
和Working 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;
}
答案 0 :(得分:1)
查看该问题的已接受答案。尝试运行perfmon
。具有相同名称的流程将被标识为process#1
,process#2
等。在您的情况下,它可以是nginx#1
,nginx#2
等。
编辑:
您需要将实例名称传递给相应的constructor overload或InstanceName
属性。根据{{3}},看起来正确的格式是使用下划线。所以,process_1
,process_2
。
答案 1 :(得分:0)
使用Azure Log Analytics时,您可以指定路径,例如
Process(nginx*)\% Processor Time
这似乎是随时从与通配符模式匹配的所有进程中收集数据。我可以确认它从新进程(更改设置后开始)中拾取数据,并且不从“死”进程中拾取数据。但是,InstanceName
(例如nginx#3
)可能会被重用,这使得分辨一个进程何时被新进程“替换”变得很困难。
我无法在Performance Monitor中执行此操作。最接近的是在“添加计数器”对话框的搜索框中键入“ nginx *”,然后选择<All searched instances>
。这将为每个进程创建一个计数器,并且在进程启动或停止时不会动态添加或删除计数器。
也许可以通过PowerShell创建的数据收集器集来完成。但是,即使您能够在实例部分中设置带有通配符的路径,也不能保证其行为符合预期(即,从随时运行的所有进程中自动收集数据)。