ASP.NET線程相關配置

來源:互聯網
上載者:User

1、(maxWorkerThreads * CPU邏輯數量)-minFreeThreads

比如2個CPU預設配置maxWorkerThreads=100,minFreeThreads=176,則同時最大隻能有24個背景工作執行緒。(這裡不管 <system.net>

<connectionManagement>

<add address="*" maxconnection="8" />

</connectionManagement>

</system.net>這個配置的值,經過測試,不管這裡的maxconnection為多少,最終都是從上面的計算公式計算出來的)

2、maxconnection,這個值是每秒可以支援的線程數。(但實際每秒可以並行啟動並執行線程為(maxWorkerThreads * CPU邏輯數量)-minFreeThreads的結果),一般要求支援並發量,每個並發請求都很耗時的情況下,就需要設定該值為對應的並發量(有這麼多線程來處理),但線程多了切換也很耗伺服器資源,實際情況往往不一定請求都很耗時,所以根據實際情況調整。

3、maxWorkerThreads是最大背景工作執行緒,預設100我覺得再非高並發下還是可以

4、minWorkerThreads是最小背景工作執行緒,由於託管線程啟動比較耗時,根據實驗結果:40秒啟動了18個線程,大概接近官方說的每秒接近2個。由於線程開銷比較耗時,因此可以初始化到正常情況下的最低支援並發數量。比如我們平台白天最少有10個並發,則可以設定最小線程為5(2個CPU),或者服務端可能會遇到瞬間的超大並發量的請求,則可設定預設最小背景工作執行緒更大一點,可以快速處理請求。minWorkerThreads只對遞增線程有影響,不影響穩定後的並發量。

5、最小空閑線程minFreeThreads參數的配置,有的官方資料建議配置成88*N的數量(如果maxWorkerThreads為100的情況),因為說為了留足夠的空閑線程給系統用,但是經過測試,發現高壓下,缺空閑線程真的空閑起來了,根本沒有用,因此我覺得應該把這個值設定小一點,比如設定為80(maxWorkerThreads為100的情況),就會留下100*2-80=120個最大串連,在高壓下就能建立120個線程,速度和效率會很快。

注意點:

1、CPU邏輯數量:按照物理CPU數量,如果CPU是超執行緒(多核)會再乘以2

2、同一時間可處理量不代表每秒可處理量,比如同一時間可以處理20個,可能每秒能處理200個,因為每個請求只要0.1秒。

3、注意配置節點中processModel裡的maxWorkerThreads、maxIoThreads和minWorkerThreads、minIoThreads都只配置單CPU邏輯數量的值,計算時會自動乘以CPU邏輯數量。

4、配置節點包括:

System.web節點下:

<processModel autoConfig="false"

maxWorkerThreads = "100"

maxIoThreads = "100"

minWorkerThreads = "20"

minIoThreads = "20"

/>

<httpRuntime

minFreeThreads="100"

minLocalRequestFreeThreads="100"

/>

System.web同級節點下

<system.net>

<connectionManagement>

<add address="*" maxconnection="8" />

</connectionManagement>

</system.net>

5、利用到的擷取參數代碼:

string result = string.Empty;

int maxWorkThread = 0;

int maxIOThread = 0;

int minWorkThread = 0;

int minIOThread = 0;

int workThread = 0;

int completeThread = 0;

ThreadPool.GetMaxThreads(out maxWorkThread, out maxIOThread);

ThreadPool.GetMinThreads(out minWorkThread, out minIOThread);

ThreadPool.GetAvailableThreads(out workThread, out completeThread);

result = DateTime.Now.ToString() + ":" + "\r\n";

result += "最大背景工作執行緒:" + maxWorkThread + ",最大IO線程:" + maxIOThread + "\r\n";

result += "最小背景工作執行緒:" + minWorkThread + ",最小IO線程:" + minIOThread + "\r\n";

result += "可用背景工作執行緒:" + workThread + ",可用IO線程:" + completeThread + "\r\n";

result += "\r\n";

(把result記錄下來,沒有用StringBuilder,臨時用的)

轉載:http://lawson.cnblogs.com/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.