zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    九校联考-DL24凉心模拟Day2T2 整除(division)
    九校联考-DL24凉心模拟Day1T3 三米诺 (tromino)
    九校联考-DL24凉心模拟总结
    异常 日志-<多重catch语句>
    时间和日期实例-<Calender计算出生日期相差几天>
    时间和日期-<Date和SimpleDateFormat>
    实用类-<Math类常用>
    实用类-<字符串与基本类型的转换>
    实用类-<装箱与拆箱>
    HashMap的应用
  • 原文地址:https://www.cnblogs.com/xiaoch/p/13417947.html
Copyright © 2011-2022 走看看