个人未完成的网站

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个线程测试结果
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

posted on 2017-08-22 17:10  我是小虫  阅读(370)  评论(0编辑  收藏  举报

导航