簡體   English   中英

應用程序池和工作進程線程之間的關系是什么?

[英]What is the relationship between Application Pools and worker process threads?

我正在解決ASP.NET應用程序中的重新啟動問題。 該應用程序每天重啟大約20次。 我們強烈懷疑應用程序的一部分,因為重新啟動是在此特定功能投入生產時開始的。 我使用log4net庫為這些頁面添加了一些日志記錄,但是我在解釋日志時遇到了問題。

當ASP.NET應用程序在應用程序池中運行時,是僅運行該應用程序的單個實例,還是運行該應用程序的多個實例? 我知道會產生幾個工作進程線程。 工作進程線程與應用程序池中運行的應用程序的關系是什么?

我想如果有多個應用程序記錄到同一個日志,我可能無法正確解釋結果。 如果一個重新啟動但另一個沒有重啟,那么日志並沒有真正告訴我很多關於重啟發生時發生的事情。

更新1

查看此頁面 ,我找到以下信息:

應用程序池定義一組一個或多個工作進程,這些進程配置有通用設置,這些設置為分配給該應用程序池的一個或多個應用程序提供請求。 由於應用程序池允許一組Web應用程序共享一個或多個類似配置的工作進程,因此它們提供了一種將一組Web應用程序與服務器計算機上的其他Web應用程序隔離的便捷方法。 流程邊界將每個工作流程分開; 因此,一個應用程序池中的應用程序問題不會影響其他應用程序池中的Web站點或應用程序。

但我仍然感到困惑。 我從經驗中知道,我可以分配兩個完全不同的應用程序來使用相同的應用程序池。 這是否意味着將產生兩個工作進程? 或者可以為第一個應用程序生成多個工作進程,並為第二個應用程序生成多個工作進程? 如果在一個工作進程中發生問題,是否可以刪除該應用程序池中運行的每個應用程序?

更新2

這個關於使用WinDbg的頁面 ,我發現了這個信息(強調我的):

在IIS 5.x中,只有一個Aspnet_wp.exe工作進程和一個調試器線程。 因此,一次只能將一個調試器附加到Aspnet_wp.exe進程。 如果您在同一台計算機上處​​理多個Web應用程序,則可能會出現問題。 在IIS 6.0中,您可以強制AppDomain在單獨的應用程序池中運行。 (有關詳細信息,請參閱第1章中的“IIS 5.x進程模型”和“IIS 6.0進程模型”。) 單獨的應用程序池提供多個W3wp.exe進程。 在這些進程中創建了多個調試器線程(每個進程一個),使您可以更有效地進行調試。

這聽起來像每個應用程序池獲得一個w3wp.exe進程。 我能解釋那個嗎? 如果是這樣,這仍然適用於IIS 7.5嗎?

是的,每個應用程序池通常是單個進程1 ,但可以包含多個線程。 您可以將多個站點分配給應用程序池,這些站點將在同一進程下運行,但是它們將在不同的“應用程序域”下運行,這些安全上下文將一個站點的代碼與另一個站點的代碼分開,即使它們是'重新在同一個應用程序池上運行。

兩個同時訪問該站點的用戶可以在不同的線程上運行,這意味着它們可以同時運行。 這意味着任何日志記錄都可以散布值。 您可能希望為日志記錄添加會話值,以便可以根據會話進行排序。

應用程序池重啟(回收)是正常的,一天20次重啟似乎並不常見。 它們可以每天發生多次,並且IIS控制何時重新啟動應用程序池。 只要感覺需要清理游泳池,它就會這樣做。 2您的應用程序應該以這樣的方式編寫,以便從中優雅地恢復(即,如果應用程序池重新啟動,請不要在會話中保留任何無法輕松重新創建的內容)。

當您的應用中發生未處理的異常時,應用池也可以重新啟動。 在這種情況下,您想要解決這個原因。 此類異常通常記錄在事件日志中。


1 - 雖然您可以將應用程序池配置為具有多個工作進程(這稱為Web Garden ),但根據我的經驗,這不是典型(通常也不建議)的配置。

2 - 請注意,使用IIS管理器可以配置應用程序以將回收事件記錄到Windows事件日志中 您還可以使用IIS管理器設置何時發生多種不同類型的回收事件的閾值。

暫無
暫無

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

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