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" />