<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    http://www.tkk7.com/ebecket 返還網
    隨筆-140  評論-11  文章-131  trackbacks-0

    探尋IIS最大并發數

    測試系統Window 2003 Server ,IIS 6.0 ,ASP.Net 3.5 sp1
    Dual 1.8雙核,2G內存,14G虛擬內存。

    為了探尋IIS的最大并發數,先要做幾個假設。

    1、假設最大并發數就是當前的連接數。意思是當前能承受最大的連接,那么就表明最大的并發。
    2、假設IIS應用程序池處于默認狀態,更改設置將會對最大連接數產生影響。

    做完假設,現在做限制,設置站點保持HTTP連接,超時設置成0,就是不會超時。在站點請求的default.aspx頁面設置線程Thread.Sleep(int.MaxValue),接下來開發一個用來保持連接的小程序。


        class Program {
            
    private volatile static int errorCount = 0;
            
    private volatile static int rightCount = 0;

            
    static void Main(string[] args) {
                ServicePointManager.DefaultConnectionLimit 
    = 10000;
                
    int count = 0;
                
    int all = 0;
                
    while (true) {
                    all
    ++; count++;
                    CreateThread();
                    Thread.Sleep(
    10);
                    
    if (count >= 200) {
                        Console.WriteLine(
    string.Format("sucess:{0};error:{1}", all - errorCount, errorCount));
                        count 
    = 0;
                    }
                    
    if (all > 1800)
                        
    break;
                }
                Console.ReadKey();
            }

            
    static void CreateThread() {
                Thread thread 
    = new Thread(ActiveRequest);
                thread.IsBackground 
    = true;
                thread.Start();
            }

            
    static void ActiveRequest() {
                RequestClient client 
    = new RequestClient("http://192.168.18.2/default.aspx?d=" + Guid.NewGuid());
                client.RequestProcess();
                
    if (client.IsError) {
                    errorCount
    ++;
                    Console.WriteLine(
    string.Format("錯誤消息:{0}", client.Messages));
                } 
    else {
                    rightCount
    ++;
                    
    //Console.WriteLine(client.Messages);
                }
            }
        }

    /**
     * author : yurow
     *      
    http://birdshover.cnblogs.com
     * description:
     *      
     * history : created by yurow 2009-8-16 0:29:05 
     
    */

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.IO;

    namespace MaxLinked {
        
    /// <summary>
        
    /// 
        
    /// </summary>
        public class RequestClient {
            HttpWebRequest request;
            WebResponse response;

            
    public RequestClient(string url) {
                request 
    = (HttpWebRequest)HttpWebRequest.Create(url);
                request.Timeout 
    = int.MaxValue;
                request.KeepAlive 
    = true;
                ErrorCode 
    = -1;
            }

            
    public void AddHeader(string name, string value) {
                request.Headers.Add(name, value);
            }

            
    private bool isError = false;
            
    private StringBuilder buffer = new StringBuilder();

            
    public int ErrorCode { getset; }

            
    public bool IsError {
                
    get { return isError; }
            }

            
    public string Messages {
                
    get { return buffer.ToString(); }
            }

            
    public void RequestProcess() {
                
    try {
                    response 
    = request.GetResponse();
                } 
    catch (WebException ex) {
                    ErrorCode 
    = (int)ex.Status;
                    buffer.Append(ex.Message);
                    isError 
    = true;
                } 
                
    if (response != null) {
                    Stream stream 
    = null;
                    StreamReader reader 
    = null;
                    
    try {
                        
    //stream = response.GetResponseStream();
                        
    //reader = new StreamReader(stream, Encoding.UTF8);
                        
    //buffer.Append(reader.ReadToEnd());
                    } catch (Exception ex) {
                        buffer.Append(ex.Message);
                        isError 
    = true;
                    } 
    finally {
                        
    //if (reader != null)
                        
    //    reader.Close();
                        
    //if (stream != null)
                        
    //    stream.Close();
                    }
                } 
    else {
                    isError 
    = true;
                    buffer.Append(
    "建立連接失敗!");
                }
            }

            
    public void Close() {
                
    if (response != null)
                    response.Close();
                request.Abort();
            }
        }
    }

     

    程序設置為只能啟動1800個線程,這是由于.Net單進程最大線程數好像是2000個。因此,要測試最大并發數,要需要同時開幾個測試進程。把系統虛擬內存調到最大值,線程過多會急劇占用內存。現在開始測試。

    打開web站點的性能計數器,把顯示比例調成1萬。

    發現到5000個連接時,IIS服務器崩潰(503錯誤),去洗了個澡,發現IIS服務器無法自己修復錯誤。又測試了幾次,發現最大并發值是8200個,但是一般到5000左右就會崩潰,有時候甚至只有1000個。

    按8200個計算,一個用戶開一個瀏覽器瀏覽網頁,可能會占用2~3個連接(參考《IIS連接數實驗——Web開發必讀 》),按兩個計算,那么IIS默認情況下,最大并發數是4000個左右。

    打開應用程序池配置,把最大工作進程數調高(默認為1),能有效提高最大連接數。我記得以前看過一篇文章,講的是調到5左右比較合適。

    posted on 2010-01-20 01:27 becket_zheng 閱讀(304) 評論(0)  編輯  收藏 所屬分類: 網頁web前端技術C#網絡/服務器
    主站蜘蛛池模板: 国产国产成年年人免费看片| 毛色毛片免费观看| 国产精品亚洲二区在线观看| 亚洲AV无码AV吞精久久| 成人免费视频网址| 亚洲av永久无码| 免费在线观看亚洲| 一级特黄录像免费播放中文版| 亚洲成a人片在线播放| 人人公开免费超级碰碰碰视频| 亚洲精品无码AV中文字幕电影网站| 一级特黄a免费大片| 精品国产亚洲一区二区三区| 午夜视频在线免费观看| 亚洲理论片在线观看| 亚洲第一中文字幕| 一级成人a毛片免费播放| 亚洲成年人电影在线观看| 好男人视频社区精品免费| 国产成人A人亚洲精品无码| a毛片免费在线观看| 中文字幕亚洲综合精品一区| A在线观看免费网站大全| 亚洲AV永久无码天堂影院 | 久久成人国产精品免费软件| 亚洲一卡2卡3卡4卡国产网站| 一级毛片aaaaaa视频免费看| 亚洲成Av人片乱码色午夜| 精品免费人成视频app| 国产精品亚洲专区无码牛牛| 国产亚洲精品无码拍拍拍色欲| 91热久久免费精品99| 亚洲欧美日韩中文字幕一区二区三区 | 野花高清在线观看免费3中文| 国产亚洲日韩在线a不卡| 国产亚洲3p无码一区二区| 韩国免费一级成人毛片| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 国产嫩草影院精品免费网址| 西西人体免费视频| 亚洲三级在线观看|