2017-06-05 133 views
1

我遇到了一個asp.net核心應用程序的問題,該應用程序在負載下啓動時虛擬掛起。一旦啓動,應用程序可以處理加載沒有問題。感覺像每個併發請求都發生初始化。有沒有人遇到類似的行爲?Asp.Net在加載時啓動時出現核心性能問題

測試場景:

  • 開始測試應用程序,不但有50多個任務
  • 該服務的啓動之前啓動該服務
  • 通知請求起步,但極長的延遲完成並且大多數會超時

作爲臨時解決方案,我創建了中間件,在第一次完成前一直等待請求。這有效地讓asp.net mvc在處理大部分請求之前進行初始化。這個特殊的應用程序是與EF核心的asp.net核心1.1(網絡API)。

+0

嗨,我遇到了同樣的問題,你能詳細說明你創建的中間件嗎?我看不到一個實施它的好方法......如果你找到了理由,我會很高興聽到它!謝謝 – Gouffe

+0

@Gouffe我在一個關於asp.net核心吞吐量的問題上發佈了我的黑客攻擊:https://github.com/aspnet/KestrelHttpServer/issues/1807#issuecomment-306329090 該問題沒有真正解決就關閉了。我一直無法追蹤到紅隼,核心或其他東西。它「感覺」像我們正在使用一些依賴關係,而不考慮併發請求的昂貴初始化。 – Kevin

+0

感謝您的鏈接,不幸的是,它不能解決我的問題。我有一個初始化問題,但是,在隨機時間,asp.net核心進程沒有任何說明(尚未)進入100%cpu。無論如何,謝謝你,非常有趣的解決方法! – Gouffe

回答

1

當使用位於中國全國各地的真實數據庫時,我對ASP.NET WebAPI的第一次請求經歷了900ms的延遲。這是因爲它需要建立一個用於連接到所述數據庫的連接池,並且在運行服務時我不急於創建連接池。相反,當我通過在服務容器中註冊爲單例的連接工廠請求連接時,它會被懶惰地初始化。

也許您遇到了與您所使用的Entity Framework Core相同類型的延遲,這可能是由SQL Server支持的。 作爲此初始請求的一部分,數據庫的連接池是否被懶惰地啓動?

試着製作一個沒有任何依賴關係的控制器,它返回一個香草200 OK。假設您沒有全球性的過濾器,其中有昂貴的服務來保溼,您應該可以看到Web服務的基線初始化性能。