2017-05-25 14 views
2
由我們的性能團隊執行

測井公司表示,此行具體地,殺害我們的CPU爲什麼應用洞察性能計數器收集造成CPU佔用率過高

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

一種理論是用來識別庫Perf Counters的正則表達式的遞歸是

https://adtmag.com/blogs/dev-watch/2016/07/stack-overflow-crash.aspx

我檢查過Perf Counter的名字,沒有什麼看起來特別出奇的名字和正則表達式應該沒有麻煩咀嚼它們。當然,很長一段時間沒有任何問題。

現在我已經打開的應用程序,試圖觀察問題的見解診斷日誌記錄(在測試環境中)

有沒有其他人看到這一點,我們如何才能減輕呢?
我們已確保DeveloperMode未設置爲打開。

+0

有沒有人注意到了這一點 - >我沒有 –

+1

你專門收集了哪些計數器?它只是默認設置,還是你配置了一些自定義? ExpandInstanceNames做了很多工作來確定與應用程序進程有關的計數器實例,所以如果您配置了自定義計數器,您可以通過避免「實例佔位符」(例如APP_WIN32_PROC)來加快速度。並指定具體的實例名稱。 另外,你看到的CPU使用模式是什麼?它一直很高,還是有尖峯?只應每5分鐘調用一次ExpandInstanceNames。 – ZakiMa

+0

@ZakiMa,是的,我們有一堆NServiceBus自定義計數器。 CPU使用率非常好,然後一個盒子上的4/8個核心會發生100%的瘋狂,這種方法看起來就像是一個小人物。但它似乎不可恢復。在我們即將進入高峯期時,這是一個值得關注的問題,而這正在發生的錫需要大量的空間。 – brumScouse

回答

1

由於AppInsights 2的代碼有很大改進,所以現在這個答案很可能不會被使用,但在我的情況下,它是雙重調用AddApplicationInsightsTelemetry()。每次調用此方法時都會添加收集器,並且由於缺少perf計數器收集器代碼內的同步,它會創建CPU尖峯。

因此,請避免多次調用AddApplicationInsightsTelemetry或使用AppInsights 2.x. (而最好的是做到兩者)。

+0

這正是我編輯要說的!我們註冊了4次,我認爲會引起很多尖峯! – brumScouse

1

您正在收集的計數器是否使用名稱中的實例佔位符?如果實例名稱在構建時已知,則刪除佔位符可能會顯着提高性能。例如,而不是

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

嘗試使用

\Process(w3wp)\% Processor Time 

而且,有多少計數器,你總何如?