IIS配置优化(全)_iis优化-程序员宅基地

技术标签: 其他  IIS配置  

 

目录

一、       设置应用程序池默认设置

二、       常规设置

三、       优化回收策略

四、       性能

五、       IIS初始化(预加载),解决(被回收后)第一次访问慢

六、       并发性

七、       安全性

八、       多服务器IIS集中化管理web

 

通常把站点发布到IIS上运行正常后,很少会去考虑IIS提供的各种参数,如何配置才是最适合当前站点运行需要的?这篇文章,从基本设置、回收机制、性能、并发、安全性等IIS设置讲解应当如何优化。

 

先来“IIS应用程序池”优化后的参数配置截图:

图中一些数值限制参数,可以借助一些工具(如:windows性能监控)观察站点运行的指标进行设置,具体后面会介绍到

clip_image001[6]

 

clip_image002[6]

 

下面来分别解说下这些参数为什么要这样设置(注:文章中的参数,不是按照应用程序池的设置从上到下排列的,而是按照优化的功能点排列)

 

一、  设置应用程序池默认设置

按如下图进行默认参数模板设置,设置后,新建的应用程序池就使用这个默认参数模板。

clip_image003[6]

 

二、   常规设置

IIS版本号查看

在iis管理器中->帮助->关于Internet信息服务,如下图,版本是IIS10.

clip_image004[6]

常规 > 启动32位应用程序

默认值:False

优化设置:按需设置。如果确认站点依赖一些32位的组件,需将此设置为true。

建议:为 32bit 应用程序的网站单独创建一个应用程序池

参考:

64位系统上iis运行32位的网站程序

常规 > 托管管道模式

IIS7 应用程序池新增的经典模式和集成模式

经典模式:是为了保留和IIS6一样的处理方式,以前开发的代码,可以方便的移植到IIS7上。

集成模式:将ASP.NET请求管道与IIS核心管道组合在一起,这种模式与操作系统结合更紧密,能够提供更好的性能,能够实现配置和治理的模块化,而且增加了使用托管代码模块扩展IIS时的灵活性。

优化设置: 改为 Integrated(集成模式)

参考:

    对IIS7经典模式和集成模式的理解

 

三、   优化回收策略

clip_image005[6]

回收 > 固定时间间隔(分钟)

一个时间段,超过该时间段,应用程序池将回收。值为 0 ,则应用程序池不会按固定间隔回收

默认值:1740分钟,29小时

优化设置:改为0 。因为无法避免在高峰期发生回收。同时设置“回收 > 特定时间”

回收 > 特定时间

应用程序池进行回收的一组特定的本地时间(24小时制)

优化设置:固定在低峰期时回收。eg:设定为 04:00 、15:30 等

另外,也可以使用windows计划任务实现iis站点每周六晚定时回收

进程模型 > 闲置超时(分钟)

一个时间段,设定工作进程允许保持闲置状态的最大时间间隔,超过该时间就会自动关闭。

优化设置:改为0,避免内存信息频繁被回收清空。同时设置“回收 > 特定时间”

进程模型 > 空闲超时操作

默认是“Terminate”(另一个选项是“Suspend”)。

Terminate 表示一旦超时就终止服务,并回收工作进程的缓冲区的内存;

Suspend 则悬停等待,暂不回收缓冲区内存。

 

另外:

CPU超限占用安全方案设置

CPU限制并不是用于控制每个进程的CPU利用率,而是一种处理发生CPU超限的工作进程的安全方案,这样可以避免工作进程占用CPU过久。

参考:

    iis7.0 cpu 限制

iis中对cpu限制的操作:

1.   限制:10000 (以百分比*1000计算,10000则表示10%)

2.   限制操作:1、noaction 无操作 2、KillW3wp 删除进程 并在限制时间内重新开启新进程

3.   限制间隔(分钟):设置时间限制,多久时间内重启和检测

内存超限回收机制

根据实际运行情况设定 "回收 > 虚拟内存限制" 和 "回收 > 专用内存限制",默认为禁用状态,一般不用为此专门设定。

开启|关闭时间限制

根据实际运行情况设定,默认90秒。如上图,我都设置为了120秒

进程模型 > 关闭时间限制(秒):为工作进程指定的,完成处理请求并关闭的时间段。如果工作进程超过关闭时间限制,将被终止。

进程模型 > 启动时间限制(秒):为工作进程指定的,启动并进行初始化的时间段。如果工作进程初始化时间超过启动时间限制,将被终止。

回收 > 禁用重叠回收

默认值 false。应用程序池使用重叠回收方式。在这种方式下,当应用程序池要关闭某个工作进程时,会先创建一个工作进程,直到新的工作进程成功创建后才关闭旧的工作进程; 

设置为 true,则先关闭旧的工作进程,然后再创建新的工作进程。 如果Web 应用程序不支持多实例运行,那么你必须配置应用程序池禁止使用重叠回收方式。

回收 > 生成回收事件条目

IIS事件查看器

方法一:点击“开始→运行”,输入eventvwr,点击“确定”,就可以打开事件查看器。

方法二:单击“开始”-“设置”-“控制面板”-“管理工具”-“事件查看器”,开事件查看器窗口。

方法三:在“运行”对话框中手工键入“%SystemRoot%/system32/eventvwr.msc /s”打开事件查看器窗口。

clip_image007[6]

 

四、  性能

clip_image008[6]

关闭IIS日志

当开启记录功能后,IIS会事无巨细地忠实记录所有的web访问记录。这些记录文件的内容是非常庞杂的,比如访问时间、客户端IP、从哪个链接访问、 Cookies等,另外还包括 Method(方法), UserAgent(用户代理)等。这些记录不但占用大量的磁盘空间还大大地影响了web服务器的性能。有人做过评测,停止访问记录可以提升5%到8%的web性能。

启用内容过期(客户端缓存)

对于静态文件启用内容过期可以提高访问性能。

1.   首先网站的目录要划分合理,图片、CSS、JavaScript均放在单独目录下

2.   然后在IIS中选择要缓存的目录 > HTTP 响应标头 > 设置常用标头 > 设置"web内容过期"策略

如上图webDemo站点,这样,用户浏览器将比较当前日期和截止日期,以便决定是显示缓存页还是从服务器请求更新的页,由于图片、CSS、JS通常变化较少,因此基本上都从本地缓存读取,从而加快显示速度。

参考:

    IIS7禁用单个静态文件的客户端缓存

服务器验证缓存

IIS自动机制,会在访问css、js等静态文件时,返回给浏览器Last-Modified和Etag标记

参考:

    浏览器缓存之Last-Modified

    服务端的缓存验证 Last-Modified和Etag

启用Gzip压缩

IIS 压缩功能使用Gzip算法

gzip是HTTP的一种压缩算法,HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或 CSS文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP压缩算法。

 

五、   IIS初始化(预加载),解决(被回收后)第一次访问慢

参考:https://www.cnblogs.com/teamblog/p/6195078.html

 

设置之后,什么时候会自动初始化?

(比如初始化执行 Global.Application_Start 初始化函数)

1)   会 - 应用程序池启动、应用程序池回收、cmd->iisreset (w3wp的PID会变)

2)   不会 - 站点重启(IIS站点右键 > 管理网站 > 重新启动)、站点启动

3)   不会 - web.config更改引起的应用程序池回收

在IIS10版本上测试是上面行为。另外有人IIS8.5上使用也是同样的行为,参考文章

 

步骤一、安装IIS应用程序初始化功能

clip_image009[6]

步骤二、设置IIS上应用程序池启动模式

常规 > 启动模式

默认值:OnDemand(按需运行模式),另外值AlwaysRuning(始终运行模式)

优化设置:改为 AlwaysRunning(始终运行)

步骤三、设置站点预加载

在IIS上站点右键 > 管理网站 > 高级设置,把【预加载已启用】设置为true。

clip_image011[6]

步骤四、配置站点 web.config ,添加站点重启后预加载请求的页面

clip_image013[6]

 

clip_image015[6]

eg:地址:http://webdemo.com/home/about

clip_image017[6]

这样操作保存后,IIS会修改 web.config 添加如下内容

01
02
03
04
05
06
<system.webServer>
    ……
    <applicationInitialization doAppInitAfterRestart="true">
        <add initializationPage="home/about" hostName="" />
    </applicationInitialization>
</system.webServer>

如果只是初始化(比如只执行 Global.Application_Start 初始化函数),不需要访问特定API进行额外资源的初始化,则不需要 <add initializationPage="**" /> 子节点

 

六、  并发性

常规 > 队列长度

HTTP.sys 将针对应用程序池排队的最大请求数。默认值1000,最大值65535。

如果设置太大则会消耗大量的系统资源 ,而设置太小会导致客户端访问时频繁出现"503服务不可用"响应。

优化设置:可先改为 5000(设置为预期最多并发用户数的1.5倍,官方参考

使用windows性能监控(性能监控:cmd->perfmon.msc),添加“HTTP Service Request Queues/CurrentQueueSize”指标,观察某个应用程序池当前队列中请求的个数。

启用Web园(Web Garden),进程模型 > 最大工作进程数

在Web园中你可以配置此应用程序池所使用的最大工作进程数,默认为1,最大可以设置为4000000; 配置使用多个工作进程可以提高该应用程序池处理请求的性能,但是在设置为使用多个工作进程之前,请考虑以下两点: 

1、每一个工作进程都会消耗系统资源和CPU占用率;太多的工作进程会导致系统资源和CPU利用率的急剧消耗; 

2、每一个工作进程都具有自己的状态数据,如果Web应用程序依赖于工作进程保存状态数据,那么可能不支持使用多个工作进程。 

这样设置,增加了处理进程数,相当于集群,避免大量请求处于排队状态

参考:

IIS并发优化

文章介绍:使用windows性能监控:cmd->perfmon.msc。监控IIS应用运行情况,再根据需要进行iis参数设置
Web Service/Current Connections 监控某个应用程序池来指示当前该应用程序池的连接的数量。
ASP.NET Apps v4.0.30319/Requests Executing 监控所有的 ASP.Net 4.0 正在处理中的请求数量。
ASP.NET v4.0.30319/Requests Current 与上述类似用于监控 Asp.Net 4.0 正在处理中的请求数量。
HTTP Service Request Queues/CurrentQueueSize 用来监控某个应用程序池当前队列中请求的个数。

调整支持并发请求的数量

默认支持并发请求数量为:5000

超出此并发数,会报异常

HTTP Error 503.2 - Service Unavailable

The serverRuntime@appConcurrentRequestLimit setting is being exceeded.

参考:

    IIS 并发请求设置如何设置?

站点最大并发连接数

右键站点 > 高级设置 > 限制 > 最大并发连接数

clip_image018[6]

设置站点线程数:minWorkerThreads、maxWorkerThreads、maxIoThreads

(感谢园友 @ runliuv 提供的新姿势)

maxWorkerThreads默认20,maxIoThreads默认20,minWorkerThreads默认1,minIoThreads默认1 ( eg:8核,默认分别就是160, 160, 8, 8 )

1、配置文件:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

2、修改参数: <processModel autoConfig="false" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50" />

其中:minWorkerThreads = maxWorkerThreads / 2   ;   minIoThreads = maxIoThreads / 2 

参数具体值如何设置,还需要各自对站点进行压力测试中调整

参考:

        博客园"黑色30秒"事件

                排查“黑色30秒”问题-为什么请求会排队

                [解决]从ASP.NET线程角度对“黑色30秒”问题的全新分析

IIS7.5优化--提高线程数来适应高并发

processModel 元素(ASP.NET 设置架构)

Improving ASP.NET Performance    (微软文档中给出了推荐值,如下图)

 

七、  安全性

为不同工作进程指定应用程序池(工作进程隔离模式)

一台服务器上有非常多的Web站点。如何才能做到各个站点之间相互独立,不因某些Web站点出现故障而影响其他站点呢?--为不同工作进程指定应用程序池是个很好的解决办法。

进程模型 > 标识,使用ApplicationPoolIdentity虚拟账户

ApplicationPoolIdentity – 默认情况下,选择“应用程序池标识”帐户。启动应用程序池时动态创建“应用程序池标识”帐户,因此,此帐户对于您的应用程序来说是最安全的。(这样,每个应用程序池都有各自的账户,就避免了木马上传到其中一个池下站点,会对另一个池的文件夹有操作权限)

参考:

   IIS7.5中神秘的ApplicationPoolIdentity

启用快速失败保护

clip_image019[6]

如果Web应用程序代码编写有问题,它可能会导致工作进程持续出现问题。默认情况下应用程序池配置为启用快速失败保护,当工作进程在配置的时间段(默认为5分钟)内发生的失败次数超过了配置的值(默认为5次),则禁用此应用程序池。

 

八、  多服务器IIS集中化管理web

   Microsoft IIS Administration 微软提供,管理IIS配置的REST API 和集中化IIS管理WEB UI。

l  支持绝大部分IIS配置项管理

l  支持管理远程IIS,实现集中化IIS配置管理。

l  支持REST API,方便集成到自研系统。

l  支持IIS配置访问安全性设置

     详细查看:多服务器IIS集中化管理web和编程访问IIS

 

其他阅读:

             IIS 开启和关闭详细报错信息(404,500,502等)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/vanmirco/article/details/118340053

智能推荐

【基础算法】反转链表的三种方法_链表反转-程序员宅基地

文章浏览阅读3.3k次,点赞13次,收藏20次。【基础算法】反转链表的三种方法_链表反转

使用遗传算法优化的BP神经网络实现自变量降维_bp神经网络优化-程序员宅基地

文章浏览阅读317次。本次利用遗传算法筛选出最具有代表的自变量,再利用BP神经网络进行预测。_bp神经网络优化

第十四届蓝桥杯青少组选拔赛Python真题 (2022年11月27日),包含答案_python 蓝桥杯真题-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏6次。初始客户编号为 1、2、3 的客户分别在 1、2、3 窗口同时办理业务;窗口 3 用时 2 分钟办理完 3 号客户的业务,变为空闲状态,并按顺序呼叫 4 号客户,4 号客户用时 4 分钟窗口 1 用时 3 分钟办理完 1 号客户的业务,变为空闲状态,并按顺序呼叫 5 号客户,5 号客户用时 7 分钟。例如: N=3.M=7、从编号3 的位置到综号 7 的位置共有5 条路线,分别为: (3->5->7),(3-5->6->7,(3->4-5->7(3->4->5->6>7) ,(3->4>6->7)。_python 蓝桥杯真题

基于RK3399 Android11适配OV13850 MIPI摄像头_camera_etc.mk-程序员宅基地

文章浏览阅读1.4k次,点赞22次,收藏21次。基于RK3399 Android11 适配MIPI摄像头 OV13850_camera_etc.mk

2020公文格式模板及范文_公文写作格式+请示、报告、会议纪要基本模板-程序员宅基地

文章浏览阅读6.4k次。一、排版1.WORD文档页面设置,页边距:上3.7cm,下3.5cm,左2.8cm,右2.6cm。具体操作过程中,根据版式要求,也可适当调整。2.字体要求:文章标题为二号方正小标宋、居中,标题内容多,可分多行,排成梯形或菱形,标题内容换行时注意词意完整,标题行距选择磅值约30-34之间,可根据版面自行设定。正文为三号仿宋,行距选择1.5倍行距,也可根据页面做适当调整。3.正文结束空2-3..._请示的页边距

Pandas-处理文本字符串(拼接)_pandas字符串拼接-程序员宅基地

文章浏览阅读6.8k次。Pandas提供了不同的方法将序列或索引与他们自己或者其他的对象进行拼接,所有的方法都是基于各自的cat()方法1.将单个序列拼接为一个完整字符串输出:2. 如果没有额外声明,sep即分隔符默认为空字串,即sep='':输出:3.默认情况下,缺失值会被忽略。使用na_rep参数,可以对缺失值进行赋值:输出:4.拼接序列和其他类列表型对象为新的序列cat()的第一个参数为类列表对象,但必须要确保长度与序列或索引相同.输出:..._pandas字符串拼接

随便推点

LLaMA 2 - 最全资源汇总,你想要的都有_llama-2-7b-chat-gguf 百度网盘-程序员宅基地

文章浏览阅读553次。LLaMA 2 是 Meta 开发的大型语言模型,是 LLaMA 1 的后继者。LLaMA 2 可通过 AWS、Hugging Face 等提供商免费用于研究和商业用途。LLaMA 2 预训练模型接受了 2 万亿个标记的训练,上下文长度是 LLaMA 1 的两倍。其微调模型已经接受了超过 100 万个人工注释的训练。本文包含 LLama 2 所有相关资源,可帮助您快速入门。它包括以下链接:LLaMA 2 是什么?Lllama 2在线体验Llama2 背后的研究Llama 2 基准测试有多好。_llama-2-7b-chat-gguf 百度网盘

《C语言程序设计》谭浩强-学习笔记以及课后习题答案(考前复习/考研/专升本)_谭浩强课后习题csdn-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏26次。《C语言程序设计》谭浩强-学习笔记-课后习题答案(考前复习/考研/专升本/)_谭浩强课后习题csdn

Knowledge Distillation by On-the-Fly Native Ensemble论文解读_on the fly 蒸馏-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏2次。1. 网络结构: Gate为全连接网络,用来学习哪个网络更重要。目前利用全连接网络选择网络部件重要性的方法很流行。“三个臭皮匠顶个诸葛亮?”,感觉很像bagging方法。2. 损失函数: 训练时softmax都有温度T=3蒸馏,测试时就恢复T=1。 最终的Loss 第一项代表各个分支的损失,第二项代表最后Teacher的损失,第三项代表各..._on the fly 蒸馏

Mac 屏幕录制 权限 没有可勾选或添加的App选项 产生原因和解决办法_mac屏幕录制没有微信选项-程序员宅基地

文章浏览阅读4.1w次,点赞12次,收藏39次。遇到问题:安装软件需要获取截屏和屏幕录制的功能权限,但是发现打开系统设置->安全性与隐私-屏幕录制,右边竟然没有可勾选或可添加的App选项产生原因:经过网络搜索关键字,发现是因为系统升级到10.5,MacCataLina过程中位于/Library/Application Support/com.apple.TCC目录下的TCC.db文件损坏了。期间遇到的错误提示(Error: table access has 7 columns but 12 values were supplied)..._mac屏幕录制没有微信选项

python一些练手小项目_pycharm 练手程序-程序员宅基地

文章浏览阅读260次。python一些练手小项目参考Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统Pycharm+Django之使用模型django基础之数据库操作使用pycharm调试django项目_pycharm 练手程序

汇编语言 第三版 王爽 实验四_汇编语言第三版实验4第三题-程序员宅基地

文章浏览阅读8.2k次,点赞4次,收藏17次。百度文库答案有误。特写此博客。_汇编语言第三版实验4第三题

推荐文章

热门文章

相关标签