[转]IIS7.5优化--提高线程数来适应高并发
根据压测结果做出的修改历史:
第一步:只针对maxWorkerThreads、maxIoThreads和minWorkerThreads做了修改<processModel autoConfig="false" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" />,发现并无明显性能提升。
第二步:针对第一步,提高了三个参数的值maxWorkerThreads="200" maxIoThreads="200" minWorkerThreads="100" 。并且修改了“每个处理器的线程数限制”,从默认值25提高到50,顺便修改了队列长度从3000到30000。此时,性能有明显提升。
第三步(未执行):修改应用程序池的“最大工作进程数”,即使用IIS的Web Garden功能(多工作进程模式)。
总结:一开始只是提高了IIS的最大、最小线程数,但是由于ASP的每个处理器的线程数限制(25),所以性能并没有明显提升。后来提高了ASP的每个处理器的线程数限制,性能才有明显好转,但直接表现是站点进程的CPU和使用线程数明显升高,导致服务器本身负载飙升。目前这种较为粗暴的直接增大参数指标的优化方式比较适用于服务器上的单站点或者单个负载较高的站点,如果一台服务器上有几个负载加高的站点,会导致服务器本身资源损耗严重反而影响站点的处理能力,第三步的Web Garden尤为明显。所以,应该持续压测、观察来找到一个较为适合我们服务器和站点结构的参数配置。
以下参考文档是对以上参数的释义及修改方法:
1、maxWorkerThreads、maxIoThreads
ASP.NET 使用以下两个配置设置来限制工作线程和完成线程所使用的最大数目︰
配置文件:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
修改参数: <processModel autoConfig="false" maxWorkerThreads="200" maxIoThreads="200" minWorkerThreads="100" />
MaxWorkerThreads参数和maxIoThreads参数隐式地乘以 Cpu 的数量。例如,如果您有两个处理器,是以下的最大工作线程数︰
2、minWorkerThreads
从 ASP.NET 1.0 Service Pack 3 和 ASP.NET 1.1 中,ASP.NET 还包含以下确定多少工作线程可能会使可立即用于远程请求提供服务的配置设置。
<processModel minWorkerThreads="1">
此设置控制的线程可以在更快的速度比从 CLR 的默认"线程优化"功能创建的辅助线程创建。可能突然填充 ASP.NET 请求队列的后端服务器上的 slow-down 由于此设置启用 ASP.NET 服务请求、 请求来自客户端,或其它类似突然爆发,会导致在队列中的请求数量突然上升。MinWorkerThreads参数的默认值为 1。我们建议您将minWorkerThreads参数的值设置为下面的值。
minWorkerThreads = maxWorkerThreads / 2
默认情况下,不存在 Web.config 文件或 Machine.config 文件中的minWorkerThreads参数。此设置隐式乘以
3、优化每个处理器限制对线程 ASP 属性的值(默认25,已修改成50)
ASP处理器限制每个线程属性指定的最大工作线程为每个 IIS 创建的处理器数。 之前的处理器使用率满足至少 50%或更高版本,应增加处理器限制每个线程的值。 此设置可能大大会影响 Web 应用程序的可伸缩性和服务器的性能通常。 因为此属性定义的最大可以同时执行的 ASP 请求数,此设置应保持为默认值,除非你 ASP 应用程序进行扩展的外部组件调用。 在这种情况下,可能会增加处理器限制每个线程的值。 这样做将使要创建更多的线程,以处理更多的并发请求的服务器。 处理器限制每个线程的默认值为 25。 此属性的最大建议的值为 100。
若要增加处理器限制每个线程的值,请执行以下步骤: 在连接窗格中,选择 web 服务器,请单击以选中功能视图,然后双击ASP功能。
单击启动,指向所有程序,单击管理工具,然后单击Internet Information Services (IIS) Manager.
在连接窗格中,选择 web 服务器,请单击以选中功能视图,然后双击ASP功能。
单击以展开限制属性下行为,单击处理器限制每个线程,输入所需的值线程每个处理器限制单击应用中操作窗格。
4、优化 ASP 队列长度属性的值(默认3000,已修改成30000)
优化此属性的目标是确保良好的响应时间,同时最小化 ASP 请求队列已满时,服务器频率发送到客户端的 HTTP 503 (服务器太忙) 错误。 如果 ASP 队列长度属性的值太低,则服务器将使用更高的频率发送 HTTP 503 错误。 如果 ASP 队列长度属性的值过高,所以用户可能会认为,服务器没有响应时实际上他们的请求正在等待队列中。 通过在高流量期间观看队列,你应识别 web 请求高峰和低谷的模式。 记下的峰值值,并设置正上方的峰值值 ASP 队列长度属性的值。 使用队列以处理短期峰值,请确保响应时间,并限制系统,从而避免重载时持续,出现意外的峰值。 如果你没有用于调整 ASP 队列长度属性的数据,将是很好的起点将队列一对一比率设置为线程的总数。 例如,如果每个处理器限制对线程 ASP 属性设为 25,具有四个处理器 (4 * 25 = 100 线程),将 ASP 队列长度属性设置为 100 并从该处优化。
若要增加队列长度的值属性,请按照下列步骤:
单击启动,指向所有程序,单击管理工具,然后单击Internet Information Services (IIS) Manager.
在连接窗格中,选择 Web 服务器,请单击以选中功能视图,然后双击ASP功能。
单击以展开限制属性下行为,单击队列长度,输入所需的值队列长度,然后单击应用中操作窗格
5、Web Garden
IIS默认配置下采用的是单工作进程的工作模式,也就是只启用一个w3wp.exe进程处理所有请求,然后进程内启用多个线程来处理并发请求,最大工作线程数由具体的操作系统和IIS来决定,当并发量大于线程数时则会让请求排队等待处理。这是面对高并发量,且部分请求处理耗时较长时就会造成大部分请求长期处于挂起的状态,直接反应就是慢或者超时。
参考链接:
https://docs.microsoft.com/zh-cn/biztalk/technical-guides/optimizing-iis-performance
http://www.cnblogs.com/tianguook/p/5204757.html
[转]IIS7.5优化--提高线程数来适应高并发的更多相关文章
- 提高线程数,解决redis超时问题
根据压测结果做出的修改历史: 第一步:只针对maxWorkerThreads.maxIoThreads和minWorkerThreads做了修改<processModel autoConfig= ...
- linux 内核参数优化----最大线程数限制及当前线程数查询
1.总结系统限制有: /proc/sys/kernel/pid_max #查系统支持的最大线程数,一般会很大,相当于理论值 /proc/sys/kernel/thread-max max_user_p ...
- 性能测试:深入理解线程数,并发量,TPS,看这一篇就够了
并发数,线程数,吞吐量,每秒事务数(TPS)都是性能测试领域非常关键的数据和指标. 那么他们之间究竟是怎样的一个对应关系和内在联系? 测试时,我们经常容易将线程数等同于表述为并发数,这一表述正确吗? ...
- Java并发(八)计算线程池最佳线程数
目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...
- 百万级高并发mongodb集群性能数十倍提升优化实践
背景 线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性.该集群采 ...
- .NET线程池最大线程数的限制-记一次IIS并发瓶颈
.NET ThreadPool 最大线程数的限制 IIS并发瓶颈,有几个地方,IIS线程池的最大队列数,工作进程数,最大并发数.这些这里就不展开.主要是最近因为过度使用Task 导致的线程数占用过多, ...
- IIS并发瓶颈线程数的限制
.NET线程池最大线程数的限制-记一次IIS并发瓶颈 https://www.cnblogs.com/7rhythm/p/9964543.html .NET ThreadPool 最大线程数的限制 I ...
- jmeter的线程数,并发用户数,TPS,RPS 关系解说
背景 在做性能测试的时候,传统方式都是用并发虚拟用户数来衡量系统的性能(站在客户端视角),一般适用于一些网页站点例如首页.H5的压测:而RPS(Requests per second)模式主要是为了方 ...
- 跟着阿里p7一起学java高并发 - 第18天:玩转java线程池,这一篇就够了
java中的线程池,这一篇就够了 java高并发系列第18篇文章. 本文主要内容 什么是线程池 线程池实现原理 线程池中常见的各种队列 自定义线程创建的工厂 常见的饱和策略 自定义饱和策略 线程池中两 ...
随机推荐
- vue 配置多页面应用
前言: 本文基于vue 2.5.2, webpack 3.6.0(配置多页面原理类似,实现方法各有千秋,可根据需要进行定制化) vue 是单页面应用.但是在做大型项目时,单页面往往无法满足我们的需求, ...
- destoon 列表页面增加手动选择排序方式
在mobile/include/mall.inc.php 行60 $order = $MOD['order']; 之前增加 排序方式判断 如果有order参数则$order接受参数,没有就用默认 ...
- Python基础——异常
捕捉所有异常 for i in range(10): try: input_number=input('write a number') if input_number=='q': break res ...
- golang导出excel(excel格式)
之前写过一篇导出cvs格式的,如果只是简单导出完全能满足需要.按时如果想要有复杂需求,如样式定制.多个sheet之类的,就无法完成了.之后发现有人已经实现golang直接excel对excel的操作, ...
- Flask-用户角色及权限
app/models.py class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=T ...
- HDU 1533 二分图最小权匹配 Going Home
带权二分图匹配,把距离当做权值,因为是最小匹配,所以把距离的相反数当做权值求最大匹配. 最后再把答案取一下反即可. #include <iostream> #include <cst ...
- A+B问题的异常解法
先%XZZ为敬 http://www.cnblogs.com/xzz_233/p/a-plus-b-problem.html 万恶之源:https://www.luogu.org/discuss/sh ...
- python中json.dump() 和 json.dumps() 有那些区别?
JSON字符串用json.dumps, json.loads JSON文件名用json.dump, json.load 以下内容摘自:<Python Cookbook> json 模块提供 ...
- 自己的Qt GUI 项目+vs2013+opencv+caffe环境配置
由于深度学习的种种优势,使我们对于深度学习的使用越来越频繁.很多时候,我们都需要在自己的项目中配置caffe环境,来调用caffe网络模型完成自己的任务.今天我主要讲的关于"在自己的项目中配 ...
- HDU——1465不容易系列之一(错排公式)
不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...