簡體   English   中英

IIS ASP.net應用程序突然掛起請求

[英]IIS ASP.net application suddenly hangs requests

我們有一個運行在IIS 8.5上的asp.net應用程序,當通信量很大時,間歇地(大約1分鍾),“請求隊列”開始增長,處理器時間減少,請查看性能監視器圖:

紅色是處理器時間,綠色是請求隊列

奇怪的是,沒有重新啟動應用程序,沒有發生503或IIS回收,那會是什么呢? 是什么突然使IIS掛起了請求一段時間? 除了該圖以外,您還可以看到Windows的內存看起來不錯且穩定。

這是一些環境配置:APP池隊列長度:10000(沒有503,所以我認為可能不是這樣)

Asp.net配置:

 <system.web>
     <applicationPool maxConcurrentRequestsPerCPU="999999" />
 </system.web>

machine.config中:

<processModel autoConfig="false" requestQueueLimit="250000"/>

我們以這種方式配置事物,因為我們的應用程序使用了大量SignalR。

該應用程序使用Azure SQL Server和Azure Redis,但這不是問題,因為另一個虛擬機(具有相同的APP)不會同時顯示此問題。

另一個提示是:在同一個VM中,我們有相同的APP,但在另一個Application Pool和另一個行為相同的域中。

任何幫助將不勝感激,這讓我發瘋。

謝謝!

您是否遵循有關配置Redis提供的有關線程池增長設置的建議,請參見此處 有類似的問題。

在您描述的環境中,我將介紹以下幾點

  1. 如果您的信號操作與數據庫有關,請查看Azure SQL服務器的DTU百分比。 只需嘗試在DTU Scale中上一層即可處理突發。 DTU
  2. 對於具有帶有多個虛擬機的Signalr的應用程序(假設負載均衡),您是否具有中央Signalr服務器或每個服務器均充當Signalr Server?

如果您可以安裝NewRelic或類似的產品,它將指向問題的根源。

希望能幫助到你。

當問題發生時(一種方法是使用任務管理器),您可以對進程進行內存轉儲,盡管如果計算機上運行着多個IIS應用程序池,則找到與之進行內存轉儲的正確進程可能不可行。不重要的。

如果您擁有Visual Studio Enterprise,那么它將為您提供一個不錯的UI,以分析轉儲。 它將顯示運行該進程的所有線程以及內存轉儲時的調用堆棧。 您可能會發現大多數.NET線程都具有類似的調用堆棧,這很可能是造成瓶頸的原因。

如果您沒有Visual Studio Enterprise,那么我認為您仍然可以使用WinDbg打開它,但這是一個CLI工具,並且我不知道命令,因此您需要對其進行查找。

在圖形中添加另一個計數器: Private Bytes 此數字將告訴您所有托管堆中所有字節的總數+非托管字節的數量。 如果該數字持續增加,那么您的某處內存泄漏。 確保妥善處理所有一次性物品,並且直到G3收集后物品才能幸存。 無論如何,我將從那里開始,如果這是問題所在,我將開始調查並查看泄漏的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM