当前位置: 首页 > news >正文

支持高并发的IIS Web服务器常用设置

适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0

适用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows Server 2012

1、应用程序池(Application Pool)的设置: 

  • General->Queue Length设置为65535(队列长度所支持的最大值)
  • Process Model->Idle Time-out设置为0(不让应用程序池因为没有请求而回收)
  • Recycling->Regular Time Interval设置为0(禁用应用程序池定期自动回收)

2、.Net Framework相关设置

a) 在machine.config中将

<processModel autoConfig="true" />

改为

<processModel enable="true" requestQueueLimit="100000"/>

(保存后该设置立即生效)

b) 打开C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers\Default.browser,找到<defaultBrowser id="Wml" parentID="Default" >,注释<capabilities>部分,然后运行在命令行中运行aspnet_regbrowsers -i。

<defaultBrowser id="Wml" parentID="Default" >
    <identification>
        <header name="Accept" match="text/vnd\.wap\.wml|text/hdml" />
        <header name="Accept" nonMatch="application/xhtml\+xml; profile|application/vnd\.wap\.xhtml\+xml" />
    </identification>
<!--
    <capabilities>
        <capability name="preferredRenderingMime"              value="text/vnd.wap.wml" />
        <capability name="preferredRenderingType"              value="wml11" />
    </capabilities>
-->
</defaultBrowser>

以解决text/vnd.wap.wml问题。

3、IIS的applicationHost.config设置

设置命令:

c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000

设置结果:

<serverRuntime appConcurrentRequestLimit="100000" />

(保存后该设置立即生效)

4、http.sys的设置

注册表设置命令1(将最大连接数设置为10万):

reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000

注册表设置命令2(解决Bad Request - Request Too Long问题):

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxFieldLength /t REG_DWORD /d 32768
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxRequestBytes /t REG_DWORD /d 32768

(需要在命令行运行 net stop http  & net start http & iisreset 使设置生效)

5、针对负载均衡场景的设置

在Url Rewrite Module中增加如下的规则:

<rewrite>
    <allowedServerVariables>
        <add name="REMOTE_ADDR" />
    </allowedServerVariables>
    <globalRules>
        <rule name="HTTP_X_Forwarded_For-to-REMOTE_ADDR" enabled="true">
            <match url=".*" />
            <serverVariables>
                <set name="REMOTE_ADDR" value="{HTTP_X_Forwarded_For}" />
            </serverVariables>
            <action type="None" />
            <conditions>
                <add input="{HTTP_X_Forwarded_For}" pattern="^$" negate="true" />
            </conditions>
        </rule>
    </globalRules>
</rewrite>

相关博文:迁入阿里云后遇到的Request.UserHostAddress记录IP地址问题

注意事项:添加该URL重写规则会造成IIS内核模式缓存不工作,详见微软的坑:Url重写竟然会引起IIS内核模式缓存不工作。

6、 设置Cache-Control为public

在web.config中添加如下配置: 

<configuration>
    <system.webServer>
        <staticContent>
            <clientCache cacheControlCustom="public" />
        </staticContent>
    </system.webServer>
</configuration>

7、ASP.NET线程设置

在machine.config的<processModel>中添加如下设置: 

<processModel enable="true" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50"/>

相关博文:云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

8、修改TCP MaxUserPort限制

由默认5000改为65534,修改方法:在注册表 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 中添加名为MaxUserPort,类型为DWORD(32-bit),值为65534(10进制)的项目并重启计算机。

相关博文:超出TCP连接端口数限制(MaxUserPort)引起的服务器问题

 

相关链接:

让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求

转载于:https://www.cnblogs.com/dudu/archive/2013/06/08/iis_webserver_settings.html

相关文章:

  • ThinkPHP框架中添加404错误页面以及访问安全
  • 一条if语句引起的思考
  • SQLSERVER使用密码加密备份文件以防止未经授权还原数据库
  • Eclipse初次java开发问题总结-1
  • android-有效解决加载大图片时内存溢出的问题
  • windows环境下PHP 开发环境的选择、建立及使用
  • 001 about hello world
  • 用string.Join与ListT或者与string数组转换为字符串
  • 使用duplicate创建dataguard
  • 刚开通了,说上几句
  • 骑士人才系统后台用户名密码重设工具源码
  • 通过 RemoteApp和桌面连接 创建RDP文件--更方便访问RDS虚拟桌面
  • 产品需求文档的10步
  • 如何在数据库中存储一棵树
  • 我为什么不建议使用OpenDNS和Google Public DNS
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Angular数据绑定机制
  • Docker入门(二) - Dockerfile
  • interface和setter,getter
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java-详解HashMap
  • js如何打印object对象
  • nodejs:开发并发布一个nodejs包
  • PAT A1050
  • php ci框架整合银盛支付
  • Redash本地开发环境搭建
  • Redis中的lru算法实现
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Terraform入门 - 3. 变更基础设施
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • windows下如何用phpstorm同步测试服务器
  • 计算机在识别图像时“看到”了什么?
  • 坑!为什么View.startAnimation不起作用?
  • 前端学习笔记之观察者模式
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 阿里云服务器购买完整流程
  • ​linux启动进程的方式
  • #mysql 8.0 踩坑日记
  • ()、[]、{}、(())、[[]]命令替换
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (汇总)os模块以及shutil模块对文件的操作
  • (四)JPA - JQPL 实现增删改查
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Linux整合apache和tomcat构建Web服务器
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .htaccess配置常用技巧
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET MVC第三章、三种传值方式
  • .net MVC中使用angularJs刷新页面数据列表