a. 請考慮如下幾點: html
1.每個工做進程都會消耗系統資源和CPU佔用率;太多的工做進程會致使系統資源和CPU利用率的急劇消耗; web
2.每個工做進程都具備本身的狀態數據,若是Web應用程序依賴於工做進程保存狀態數據,那麼可能不支持使用多個工做進程。 windows
3. 成資源競爭,讓多個工做進程運行同一個應用程序會形成資源競爭 服務器
b. 修改ISS最大工做進程數提升該應用程序池處理請求的性能 cookie
1.在IIS 6.0的Web園(Web Garden)中,指定用於某個應用程序池的工做進程的數量就能夠提升該應用程序池處理請求的性能。當服務器的負載較小,不須要額外的工做進程時,IIS 6.0在必定的時間後(默認20分鐘,可配置)自動縮減實際的工做進程數量;若是負載變大,須要額外的工做進程,IIS 6.0再次增長工做進程數量。這一切操做都自動進行,不須要管理員干預。 session
2.修改方法以下: 架構
修改服務器.net framework的machine.config的配置 併發
目錄:C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config asp.net
將其中的「processModel」節點的「allowDefinition」值設置爲「Everywhere」 dom
修改服務器中的iis最大工做進程數:
方法:右擊iis應用程序池 --> 屬性 -> 「性能」選項卡 -> web園 -> 最大工做進程數
注:經測試驗證,服務器爲32(16*2)核32G內存時,設置爲5性能最優。
(PS: processModel 元素(ASP.NET 設置架構) 元素配置用於服務器(包括服務器上的全部 ASP.NET 應用程序)的處理模型。所以,processModel 設置只能放在 Machine.config 文件中,並且不能被任何 Web.config 文件中的設置重寫。 )
a. 關閉IIS訪問記錄能夠提高web性能
1.IIS6.0默認開啓對於web的IIS訪問記錄。當開啓記錄功能後,IIS會事無鉅細地忠實記錄全部的IIS訪問記錄。這些記錄 文件的內容是很是龐雜的,好比訪問時間、客戶端IP、從哪一個連接訪問、 Cookies等,另外還包括 Method(方法), UserAgent(用戶代理)等。
這些記錄不但佔用大量的磁盤空間還大大地影響了web服務器的性能。有人作過評測,中止IIS訪問記錄能夠提高5%到8%的web性能。
2.方法:打開IIS管理器,定位到具體的web站點,右鍵點擊選擇「屬性」,在「主目錄」選項卡下取消對「記錄訪問」的勾選便可
Web.config配置優化(生產環境)
d. 並非全部的Modules都是必需的,去除不用的HttpModules能夠提升請求速度
1.asp.net默認的HttpModules管理請求的管線控制每個請求。
例如:SessionStateModule攔截每個請求,分析session cookie 來加載HttpContext中的合適的session.可是並非全部的Modules都是必需的,好比:若是你不用membership的話,就不用 配置FormsAuthentication模塊;若是你不用windows身份驗證就不用配置WindowsAuthentication,這些模塊只 是包含在管線裏面,爲每個請求執行一些並非必須的代碼。
2.默認的模塊定義在machine.config中(在網站的web.config中設置表示當前網站有效)($WINDOWS$\Microsoft.NET\Framework\$VERSION$\CONFIG)。若是不須要這些管線的話,配置以下:
<httpModules> <!--去除沒必要要的節點,提升請求速度--> <remove name="OutputCache" /> <remove name="Session" /> <remove name="WindowsAuthentication" /> <remove name="FormsAuthentication" /> <remove name="PassportAuthentication" /> <remove name="RoleManager" /> <remove name="UrlAuthorization" /> <remove name="FileAuthorization" /> <remove name="AnonymousIdentification" /> <remove name="Profile" /> </httpModules>
Web.config中的<pages>節點配置全局定義頁特定設置,如配置文件範圍內的頁和控件的 ASP.NET 指令。默認enableViewState屬性爲「true」,即開啓視圖,若是不使用這個機制就能夠設置爲「false」。
默認autoEventWireup屬性爲「true」,即開啓頁事件,若是不使用這個機制就能夠設置爲「false」。
默認buffer屬性爲「true」,即開啓 HTTP 響應緩衝。
默認enableViewStateMac屬性爲「false」,開啓對頁的視圖狀態運行計算機身份驗證檢查 (MAC),以放置用戶篡改,若是設置爲true,將會引發性能的下降。
默認validateRequest默認爲true,開啓驗證用戶輸入中有跨站點腳本攻擊和SQL注入式漏洞攻擊,,若是出現匹配狀況就會發 HttpRequestValidationException 異常。
Web.config中的<customErrors>節點用於定義一些自定義錯誤信息的信息。此節點有Mode和defaultRedirect兩個屬性,其中defaultRedirect屬性是一個可選屬性,表示應用程序發生錯誤時重定向到的默認URL,若是沒有指定該屬性則顯示通常性錯誤。Mode屬性是一個必選屬性,它有三個可能值,它們所表明的意義分別以下:
Mode 說明
On 表示在本地和遠程用戶都會看到自定義錯誤信息。
Off 禁用自定義錯誤信息,本地和遠程用戶都會看到詳細的錯誤信息。
RemoteOnly 表示本地用戶將看到詳細錯誤信息,而遠程用戶將會看到自定義錯誤信息。
這裏有必要說明一下本地用戶和遠程用戶的概念。當咱們訪問asp.net應用程時所使用的機器和發佈asp.net應用程序所使用的機器爲同一臺機器時成爲本地用戶,反之則稱之爲遠程用戶。在開發調試階段爲了便於查找錯誤Mode屬性建議設置爲Off,而在部署階段應將Mode屬性設置爲On或者RemoteOnly,以免這些詳細的錯誤信息暴露了程序代碼細節從而引來黑客的入侵。
配置以下:
<customErrors mode="On" defaultRedirect="Error.html"/>
Web.config中的<compilation>節點配置 ASP.NET 使用的全部編譯設置。默認的debug屬性爲「true」,即容許調試,在開發階段這樣配置沒有問題。但正式部署上線後,這樣會影響支撐接口的性能,因此在程序編譯完成上線以後應將其設爲「false」。
配置以下:
<compilation debug="false" />
鏈接併發數限制是指對於同一個ip對同一個domain發起的最大鏈接數。其實在大多數微軟的產品或組件中都存在這個限制,通常這個數值是2/4個,也就是說在默認狀況下,對於同一個ip訪問同一個domain同時最多有2個鏈接處於創建狀態。默認是2,這個值過低了。這意味着每個IP最多隻能有兩個請求到你的網站,這樣會形成請求擁堵。asp.net中connectionManagement節點能夠設置單個ip對同某個domain發起的最大鏈接數。
配置以下:
<system.net> <connectionManagement> <add address="*" maxconnection="100" /> </connectionManagement> </system.net>
address表明針對哪一個domain,maxconnection表明最大鏈接數。
enableVersonHeader:指定 ASP.NET 是否應輸出版本標頭。使用該屬性來肯定當前使用的 ASP.NET 版本。對於生產環境,該屬性不是必需的,能夠禁用。
配置示例:
<httpRuntime enableVersionHeader="false" />