IIS 并发连接 设置与测试
背景介绍
- windows7
- iis7.0
- .net 4.0
配置项
通过配置网站的限制或者通过高级选项配置,效果是一样的,默认值是4294967295
通过图片中的文字,清楚的知道当网站并发请求大于这个设置的数值时,会收到503错误。
应用程序池的设置
队列设置
进程数量设置
测试代码:
网站端代码:
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
var dt = DateTime.Now.ToString("HH:mm:ss:fff");
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(double.Parse(System.Configuration.ConfigurationManager.AppSettings["sleeptime"])));
context.Response.Write(System.Threading.Thread.CurrentThread.ManagedThreadId + " - Hello World! 开始时间:" + dt + "结束时间:" + DateTime.Now.ToString("HH:mm:ss:fff"));
}
public bool IsReusable
{
get
{
return false;
}
}
}
客户端代码
class Program
{
static void Main(string[] args)
{
Console.WriteLine("输入exit退出程序,输入其他字符开始程序");
List<Thread> threadlist = new List<Thread>();
while (Console.ReadLine() != "exit")
{
Console.WriteLine("开始建立请求" + DateTime.Now.ToString("HH:mm:ss:fff"));
threadlist.Clear();
for (int i = 0; i < 10; i++)
{
threadlist.Add(new Thread(() =>
{
var client = new System.Net.Http.HttpClient();
var dt = DateTime.Now.ToString("HH:mm:ss:fff");
Console.WriteLine(string.Format("线程名【{0}】线程开始时间:" + dt, Thread.CurrentThread.Name) + " 结果:" + client.GetStringAsync("http://172.16.13.106:8888/Handler1.ashx").Result);
}) { Name = i.ToString() });
}
threadlist.ForEach(t => { t.Start(); });
}
}
}
测试结果
本次测试刚好是开启了10个线程(据说windows7中的iis最大运行线程就是10个,接下来我们开启50个线程 看一下结果)
50个线程测试结果
通过上面图片我们可以发现,iis给出的线程id(就是在“结果:”后面出现的数字)一直在 6、8、9 、10~17这几个数字之间循环,很明显是只有10个线程在处理。
这就已发出我们再网上经常看到好多人都在转载的文章,一下给出这个文章的连接http://blog.csdn.net/dream_ll/article/details/45217691
补充:通过多次测试,并不是每次都只有10个线程,也出现过两次有11个线程id的时候
当我们把应用程序池的进程从1改到100的时候,请求处理速度明显变快了,从以前的完成50个并发需要1分钟到现在只需要11秒左右,虽然我还不明白为什么会是这样,按照网上说法是开启多个进程进行处理,此时需要小心session,不要存在进程中,可能会导致丢失。
当我们修改配置连接数的时候,如果并发测试数量大于配置的数量,会收到503的异常,因为我用的HttpClient进行测试的,如果你直接使用网页进行打开,会返回一个503页面。
不同的是:
队列数貌似没有任何作用,我的队列数全程都是设置的1000,但我把最大连接数设置成5的时候,并发测试链接10个的时候仍然会返回503,并没有进入队列。
期待大家指点迷津。
总结:此文章存在很多疑问和漏洞,明显是对iis的工作原理了解不够清楚,此次测试能够得到的就是 最大连接数一定会限制同时请求的数量,超过了一定会返回503,还要就是浏览器的并发请求是有限制的 chrome默认是6个,ff默认好像是4个。这个也会随着浏览器版本的变化而变化。
http://blog.csdn.net/dream_ll/article/details/45217691
https://msdn.microsoft.com/zh-cn/library/7w2sway1.aspx
http://bbs.csdn.net/topics/391893556?page=1
http://www.cnblogs.com/sandyliu1999/p/5099615.html