c# - parse - newtonsoft.json nuget



ProfileServer BLOCKED_TIME在IdentityServer4/Newtonsoft.Json中 (1)

我遇到的問題是,我的IdentityServer的/ connect / introspect端點有時非常慢(一次調用10秒)。 正如你在下面看到的,大部分的調用(18k)都很快(<250ms)。

我已經啟用了新的Application Insights分析 ,大部分緩慢的跟踪看起來像這樣:

正如Application Insights分析器頁面所述

BLOCKED_TIME表示代碼正在等待其他資源可用,例如等待同步對象,等待線程可用或等待請求完成。

但我沒有理由相信這應該在等待什麼。 請求沒有秒殺,所以我不認為沒有足夠的線程可用或什麼的。 對我們的應用服務計劃來說,內存似乎沒有問題,因為它總是在40%左右。 我也挖掘了IdentityServer4的來源,但無法找到任何原因。 所以現在我有點卡住了。 任何人都可以指出我對這些緩慢的請求可能的原因? 或者指出我確定一個原因的好方向? 任何幫助都感激不盡!

編輯一些額外的信息:我們使用IdentityServer4.EntityFramework存儲引用標記在SQL Azure數據庫。 我查看了Application Insights,那些慢速請求中的查詢在50ms以內執行。 所以我猜這不是數據庫。


看看信息,所有的請求都在3222毫秒左右,直到你開始序列化你的JSON。 當你開始序列化你的數據到JSON JSON時,請求跳轉到5589毫秒,當你反序列化它時,跳轉到8811毫秒。

這裡的問題不是數據庫,數據庫可能會得到足夠快的數據。 不是請求中的尖峰,你沒有,也不存在不存在的內存問題。

問題是你正在獲取大量的數據,據推測,編譯器在序列化和反序列化數據時會受到懲罰,這兩個操作都相當昂貴。

您必須將您的列表安排為JSON,然後將其反序列化為可以再次訪問的對象。

看看這些調用之間發生了什麼,你正在序列化和反序列化的數據量以及之後會發生什麼。

那是你的鑰匙。





azure-application-insights