欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IIS 并发连接 设置与测试

程序员文章站 2022-07-15 16:01:40
...

背景介绍

  • windows7
  • iis7.0
  • .net 4.0

配置项

通过配置网站的限制或者通过高级选项配置,效果是一样的,默认值是4294967295
IIS 并发连接 设置与测试
IIS 并发连接 设置与测试
通过图片中的文字,清楚的知道当网站并发请求大于这个设置的数值时,会收到503错误。

应用程序池的设置

  • 队列设置
    IIS 并发连接 设置与测试

  • 进程数量设置
    IIS 并发连接 设置与测试

测试代码:
网站端代码:

    /// <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(); });

            }
        } 
    }

测试结果
IIS 并发连接 设置与测试

本次测试刚好是开启了10个线程(据说windows7中的iis最大运行线程就是10个,接下来我们开启50个线程 看一下结果)

50个线程测试结果
IIS 并发连接 设置与测试

通过上面图片我们可以发现,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

相关标签: iis .net 并发