IIS 高并发的相关配置
前言:
随着业务量的增加,服务器流量的增长增长了好多,高峰期会出现 503 的错误,IIS 对请求数的配置默认是 1000,无法满足现状的需求;
需要收集性能数据如下:
1、Windows性能监视器,该应用程序池进程的线程和处理队列
2、问题重现时的进程dump
这是请求到达IIS后遇到的第一个队列,HTTP.sys收到请求后会将请求放入对应的应用程序池队列,这样可以减少上下文的切换。
需要注意的是应用程序池队列虽然是给w3wp进程用的,但它存在于http.sys的内存区(http.sys是一个运行于kernel-mode的设备驱动程序)。
如果把 http.sys 比作一块网卡,那应用程序池队列相当于网卡的缓冲区。
w3wp 从应用程序池队列中取出请求后,接下来就是从CLR线程池中捞出一个CLR线程处理请求,如果池中空无一线,就会将请求放在CLR线程池队列中。
检测两个队列的情况,可以使用Windows性能监视器
Http Service Request Queues\CurrentQueueSize
Http Service Request Queues\ArrivalRate
ASP.NET v4.0.30319\Requests Queued
ASP.NET v4.0.30319\Requests Current
一、应用程序池(Application Pool –> 高级设置 –> 队列长度)
- General->Queue Length设置为65535(队列长度所支持的最大值,缺省值为1000)
- Recycling->Regular Time Interval设置为0(取消应用程序池固定时间间隔的自动回收,缺省值为1740)
- Process Model->Idle Time-out设置为0(取消应用程序池因为空闲超时而关闭,缺省值为20分钟)
<!-- 调大应用程序池的请求队列 -->
C:\Windows\System32\inetsrv>appcmd set apppool webform -queueLength:65535
<!-- 取消固定时间间隔的回收 -->
C:\Windows\System32\inetsrv>appcmd set apppool webform -recycling.periodicRestart.time:00:00:00
<!-- 设置指定时间点的回收 -->
C:\Windows\System32\inetsrv>appcmd set apppool webform /+recycling.periodicRestart.schedule.[value='04:15:00']
<!-- 取消空闲超时的进程关闭 -->
C:\Windows\System32\inetsrv>appcmd set apppool webform -processModel.idleTimeout:00:00:00
<!-- 开启所有回收事件的日志 -->
C:\Windows\System32\inetsrv>appcmd set apppool webform -recycling.logEventOnRecycle:"Time, Requests, Schedule, Memory, IsapiUnhealthy, OnDemand, ConfigChange, PrivateMemory"
IIS (C:\Windows\System32\inetsrv\config\applicationHost.config)
1、设置命令:
c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000
2、设置结果:
<!-- IIS并发请求数 -->
<serverRuntime appConcurrentRequestLimit="100000" />
.NET Framework & ASP.NET (C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config 和 WebAppRoot\web.config)
<!-- .NET Framework 进程模型 配置,最大工作线程(真实的线程数 = 此值 * 逻辑CPU数) -->
<processModel enable="true" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50" /> <!-- ASP.NET 请求处理队列 -->
<httpRuntime appRequestQueueLimit="100000"/>
二、网络协议
0、是否是连接数达到了上限,win2008以前的版本,对半开连接数是有限制的,但是从win7、win vista、win2008之后就关闭了该项限制
1、将最大连接数设置为10万
reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000
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
2、修改TCP MaxUserPort限制(由默认5000改为65534)
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v MaxUserPort /t REG_DWORD /d 65534
3、 net stop http & net start http & iisreset (干脆直接重启计算机)
转载自:
压力测试报出503错误---ASP.NET支持大并发的相关配置
云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析
IIS 高并发的相关配置的更多相关文章
- 支持iis高并发
支持高并发的IIS Web服务器常用设置 适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows ...
- IIS 高并发导致log记录不完全
项目测试性能过程中,对于高并发测试过程中发现log记录缺失一部分,经过调查,找到了原因是因为IIS连接数的限制,经过修改连接数,成功完成.设置如下: “点击网站”->“右击切换到功能视图”-&g ...
- 压力测试报出503错误---ASP.NET支持大并发的相关配置
项目反馈报出503错误,需要收集性能数据如下: 1.Windows性能监视器,该应用程序池进程的线程和处理队列 2.问题重现时的进程dump 这是请求到达IIS后遇到的第一个队列,HTTP.sys收到 ...
- Nginx中并发性能相关配置参数说明
worker_processes:开启worker进程的数目,通常可设置为CPU核心的倍数.在不清楚的情况下,可设置成一倍于CPU核心数或auto(Nginx将自动发现CPU核心数). worker_ ...
- (持续更新) C# 面试技术点、常见SQL技术点 和 解决高并发的相关技术
这篇博客 持续更新. 方便小伙伴们学习与面试前的复习
- Netty Redis 亿级流量 高并发 实战 (长文 修正版)
目录 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -30[ 博客园 总入口 ] 写在前面 1.1. 快速的能力提升,巨大的应用价值 1.1.1. 飞速提升能力,并且满足实际开发要求 1 ...
- Netty 高并发 (长文)
目录 Netty+Zookeeper 亿级 高并发实战 (长文) 写在前面 1. 高并发IM架构与部分实现 1.1. 高并发的学习和应用价值 1.1.1. 高并发IM实战的价值 1.1.2. 高并发I ...
- 朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招
朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招 概览 标题中的高并发架构设计是指设计一套比较合适的架构来应对请求.并发量很大的系统,使系统的稳定性.响应时间符合预期并且能在极端的情况下自 ...
- [ 高并发]Java高并发编程系列第二篇--线程同步
高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...
随机推荐
- Linux python3安装/shell脚本/if/循环/函数
python3安装 安装过程 安装包: wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgztar -xvf Python-3.7 ...
- java NIO 模型(一)
1. 阻塞I/O通信模型 1.性能:一连接一线程模型导致服务端的并发接入数和系统吞吐量受到极大限制 2.可靠性:由于IO操作采用同步阻塞模式,当网络拥塞或者逻辑处理缓慢会导致IO线程被挂住,阻塞时间无 ...
- Js用户引导插件intro
1.demo直接贴上来了,有什么不懂的,直接去官网上看,地址:https://introjs.com/. 2.这个intro插件的版本是v2.7.0,复制下来代码,引入库应该直接可以运行. 3.点评一 ...
- python学习之路-第一天-接触python
我的入门就决定用<简明Python教程> <简明Python教程> 1. python的优势 简单:专注于解决问题而不是关注语言本身 易学:容易上手 开源.免费 可移植性非常强 ...
- Efficiency in Shell
最近在写一个shell脚本, 由于该脚本对效率有较高的要求, 所以查阅了一些文章. 感觉这篇文章写得确实不错, 文章中的例子,确实很棒! 所 以我把他们提取出来: @1:实例: 需求:计算1到1000 ...
- redis的安装配置(转)
一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址 ...
- requirejs源码分析: requirejs 方法–1. 主入口
该方法是 主要的入口点 也是最常用的方法. req = requirejs = function (deps, callback, errback, optional) { //Find the ri ...
- Swift 学习 用 swift 调用 oc
开发过程中 很可能 把swift不成熟的地方用成熟的oc 代码来弥补一下 , 下面简单来学习一下,我也是照着视频 学习的 卖弄谈不上 就是一次学习笔记, 具体问题还是具体分析吧. 需求 给展出出来的 ...
- json教程系列(3)-JSONObject的过滤设置
我们通常对一个json串和java对象进行互转时,经常会有选择性的过滤掉一些属性值.例如下面的类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
- C语言中auto,register,static,const,volatile的区别
1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是aut ...