Monitoring 为什么Application Insights性能计数器收集会导致高CPU使用率

Monitoring 为什么Application Insights性能计数器收集会导致高CPU使用率,monitoring,azure-application-insights,Monitoring,Azure Application Insights,我们的性能团队执行的日志记录表明,这一行正在杀死我们的CPU Microsoft.AI.PerfCounterCollector!Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.Implementation.PerformanceCounterUtibility.ExpandInstanceName() 一种理论是,用于识别库中性能计数器的正则表达式正在递归 我已经检查了Perf计数器的名称,没有任何东西看起来特

我们的性能团队执行的日志记录表明,这一行正在杀死我们的CPU

Microsoft.AI.PerfCounterCollector!Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.Implementation.PerformanceCounterUtibility.ExpandInstanceName()

一种理论是,用于识别库中性能计数器的正则表达式正在递归

我已经检查了Perf计数器的名称,没有任何东西看起来特别不协调,关于名称和正则表达式应该没有问题仔细研究它们。当然,在很长一段时间内,没有任何问题

我现在打开了ApplicationsInsights诊断日志,试图观察问题(在测试环境中)

是否有其他人注意到了这一点,我们如何减轻这一点?

我们已确保DeveloperMode未设置为on。您正在收集的计数器是否在其名称中使用实例占位符?如果实例名称在生成时已知,那么去掉占位符可能会显著提高性能。例如,而不是

\Process(??APP_WIN32_PROC??)\% Processor Time
试用

\Process(w3wp)\% Processor Time

另外,您总共收集了多少个计数器?

由于AppInsights 2代码有了很大改进,这个答案现在很可能不可用,但在我的例子中,它是double call AddApplicationInsightsTelemetry()。每次调用此方法时,它都会添加收集器,由于perf计数器收集器代码内部缺乏同步,因此会产生CPU峰值


因此,避免多次调用AddApplicationInsightsTelemetry,或使用AppInsights 2.x。(最好是两者兼备)。

有没有其他人注意到这一点->我不知道你具体收集了哪些计数器?这只是默认设置,还是您配置了自定义设置?ExpandInstanceNames在确定与应用程序进程相关的计数器实例方面做了大量工作,因此,如果您配置了自定义计数器,您可以通过避免“实例占位符”(例如“APP\u WIN32\u PROC”)来潜在地加快速度??以及指定具体的实例名称。另外,您看到的CPU使用模式是什么?是一直很高,还是有尖峰?ExpandInstanceNames应该每5分钟左右调用一次。@ZakiMa,是的,我们有很多NServiceBus自定义计数器。CPU的使用率是绝对好的,然后一个盒子上的4/8核会100%的疯掉,这种方法看起来就像是一个恶棍。但它似乎无法恢复。“这是一个令人担忧的问题,因为我们即将进入一个高峰期,而发生这种情况的锡需要大量的净空。”托卡普兰回答如下。上面的问题也是他提出来的——当时他没有足够的声望来问自己=)我有一个答案很快就会发布。这正是我的编辑要说的!我们注册了4次,我认为这导致了很多扣球!