我试图阅读类别" HTTP服务请求队列中的性能计数器"在我的Azure辅助角色应用程序(C#)中。
默认情况下,应用程序无法获得该类别的任何计数器,即
string performanceCategoryName = "HTTP Service Request Queues";
var httpQueueCategory = PerformanceCounterCategory.GetCategories().FirstOrDefault(category => category.CategoryName == performanceCategoryName);
给出null。
但是,如果我将远程桌面插入实例并启动perfmon,我可以看到那里的类别。如果我从perfmon查看它然后重新启动应用程序,那么应用程序也可以读取计数器。好像perfmon创建了计数器,默认情况下它不存在。
有人知道这方面的工作吗?
答案 0 :(得分:0)
我通过启动cmd-process并在owin侦听器启动后从我的应用程序中调用“typeperf -q”来解决这个问题。
这与打开perfmon具有相同的效果,即默认情况下不存在的类别现在可用于我的应用程序。 确保在尝试访问计数器类别之前等待typeperf列表完成(在小型azure工作者角色实例上需要大约20秒)。
这对我有用:
var startInfo = new ProcessStartInfo()
{
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "cmd.exe",
Arguments = "/C typeperf.exe -q",
};
Process p = new Process() { StartInfo = startInfo };
p.Start();
p.WaitForExit(2*60*1000);
string performanceCategoryName = "HTTP Service Request Queues";
var httpQueueCategory = PerformanceCounterCategory.GetCategories().FirstOrDefault(category => category.CategoryName == performanceCategoryName);
请注意,在注册应用程序http侦听器后进行列表非常重要。否则您的实例将无法使用。我注意到了这一点,因为我尝试在工作人员角色启动之前将cmd作为启动任务运行,但这不起作用。