processModel與ASP.NET進程模型


配置 Microsoft Internet 信息服務 (IIS) Web 服務器上的 ASP.NET 進程模型設置。其作用是配置IIS或IIS中的應用程序池(IIS7及以后版本)的安全性,性能,健壯性,可靠性。

processModel 節只能在 Machine.config 文件中進行設置,它影響服務器上運行的所有 ASP.NET 應用程序。Machine.config文件則位於Windows\Microsoft.NET\Framework64\{.Net Framework Version}\ConfigWindows\Microsoft.NET\Framework\{.Net Framework Version}\Config中。

其配置節內容和默認設置如下,查看各個屬性的作用可參考https://msdn.microsoft.com/zh-cn/library/7w2sway1(VS.80).aspx

   

 

   

在IIS6中引入了應用程序池,在應用程序池的高級設置中就包含了processModel的設置,其中應用程序標識的配置和idleTimeout的設置在Machine.config和應用程序池高級設置中都存在,但是就以應用程序池的為准了。

如在Machine.config中設置userName和password,

    <processModel 
    userName="Administrator"
    password="111" />

 

通過任務管理器查看進程的

以及通過以下代碼查看進程的用戶名時均無生效

 

        string GetProcessUserName(int pID)
        {
            string text1 = null;

            SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID);
            ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1);

            try
            {
                foreach (ManagementObject disk in searcher1.Get())
                {
                    ManagementBaseObject inPar = null;
                    ManagementBaseObject outPar = null;

                    inPar = disk.GetMethodParameters("GetOwner");

                    outPar = disk.InvokeMethod("GetOwner", inPar, null);

                    text1 = outPar["User"].ToString();
                    break;
                }
            }
            catch
            {
                text1 = "SYSTEM";
            }

            return text1;
        } 

 

 

 

但是在應用程序池的高級設置中設置則生效

   

同理,設置閑置超時(idleTimeout)同樣都是在應用程序池中設置才生效,在Machine.config中設置超時時間為1分鍾,

<processModel
idleTimeout="1"/>

 

在應用程序池中設置為2分鍾

訪問站點后留意"任務管理器"中w3wp進程消失的時間,就會發現在靜置兩分鍾后w3wp被結束掉。

經過觀察還發現了其他雖然不是重名的屬性,但是看其作用相似的,本人未去驗證其有效性,但也列舉出來

Machine.config ----------- 應用程序池

================================================

shutdownTime --------------- shutdownTImeLimit

pingInterval --------------- pingFrequency

pingResponseTime------------ pingTimeout

webGarden --------------- maxProcesses設置成大於1時

   

此外單純出現在Machine.config配置節的屬性還是會生效的,例如通過查看應用程序池的線程數量來看對maxWorkerThreadsmaxIoThreads是否會生效。

在Machine.config中添加以下設置。

    <processModel 
         autoConfig="false"
         maxWorkerThreads="1000"
         maxIoThreads="999" />

 

   

WebForm頁面的Page_Load方法添加以下代碼

int work,io;

ThreadPool.GetMaxThreads(out work, out io);

this.lb1.Text += string.Format("<br/> work {0} io {1}",work,io);

 

運行后發現執行結果如下

這里額外說明一下,如果autoConfig設置成true,它會自動設置maxWorkerThreadsmaxIoThreads,如需使用用戶自定義設置,則需要設置成false,另外maxWorkerThreadsmaxIoThreads是單個CPU中工作線程與IO線程的數量,鄙人的電腦是雙核四線程,所以實際運行出來的結果是該設置值的4倍。

關於性能這一方面鄙人參考了微軟上面的一篇文章,閱讀之后總結了以下幾點

   

1.實際線程池的maxWorkerThreadsmaxIoThreads是配置節中

maxWorkerThreads*CPU數

maxIoThreads*CPU數

2.minWorkerThreads最好設置成 minWorkerThreads = maxWorkerThreads / 2

3.單個CPU最多處理的請求數目為 (maxWorkerThreads*number of CPUs)-minFreeThreads,minFreeThreads是httpRuntime配置節的Attribute

4.If you are making one Web service call to a single IP address from each ASPX page。Microsoft 建議您使用以下配置設置︰

 maxWorkerThreads參數和maxIoThreads參數的值設置為100

設置的maxconnection參數的值 12 *N (N是CPU數量)

設置的minFreeThreads參數的值 88 *N minLocalRequestFreeThreads參數76 *N.

•MinWorkerThreads50

   

例如,您有帶四個處理器和啟用超線程的服務器。根據這些公式,將本文中提到的配置設置使用下列值。

<system.web>
  <processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50"/>
  <httpRuntime minFreeThreads="704" minLocalRequestFreeThreads="608"/>
</system.web>
<system.net>
  <connectionManagement>
    <add address="[ProvideIPHere]" maxconnection="96"/>
  </connectionManagement>
</system.net>

 

   

   

參考文章

https://support.microsoft.com/zh-cn/kb/821268

https://msdn.microsoft.com/zh-cn/library/7w2sway1(VS.80).aspx

https://www.iis.net/configreference/system.applicationhost/applicationpools/add/processmodel

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM