一、併發的基本含義 在操作系統中,併發是指一個時間段中有幾個程式都處於已啟動運行到運行完畢之間,且這幾個程式都是在同一個處理機上運行,但任一個時刻點上只有一個程式在處理機上運行。 在關係資料庫中,允許多個用戶同時訪問和更改共用數據的進程。SQL Server 使用鎖定以允許多個用戶同時訪問和更改共用 ...
一、併發的基本含義
在操作系統中,併發是指一個時間段中有幾個程式都處於已啟動運行到運行完畢之間,且這幾個程式都是在同一個處理機上運行,但任一個時刻點上只有一個程式在處理機上運行。
在關係資料庫中,允許多個用戶同時訪問和更改共用數據的進程。SQL Server 使用鎖定以允許多個用戶同時訪問和更改共用數據而彼此之間不發生衝突。
在網路伺服器上,併發是指同一時刻能處理的連接數,可以理解為伺服器最多維護多少個會話數,比如,伺服器能建立1000個TCP連接,即伺服器同時維護了1000個socket,這個伺服器的併發量就是1000,但是伺服器可能只有單核或者8核,16核等,總之對這1000個socket連接的處理也是分時來做的。每個socket伺服器處理的時間如果是1s,那麼該伺服器1s內可以處理完1000個請求,如果每個socket處理100ms的話,那麼該伺服器1s內可以處理10000個請求。
二、與並行區別
併發:當有多個線程在操作時,如果系統只有一個CPU,則它根本不可能真正同時進行一個以上的線程,它只能把CPU運行時間劃分成若幹個時間段,再將時間 段分配給各個線程執行,在一個時間段的線程代碼運行時,其它線程處於掛起狀。.這種方式我們稱之為併發(Concurrent)。
並行:當系統有一個以上CPU時,則線程的操作有可能非併發。當一個CPU執行一個線程時,另一個CPU可以執行另一個線程,兩個線程互不搶占CPU資源,可以同時進行,這種方式我們稱之為並行(Parallel)。
區別:併發和並行是即相似又有區別的兩個概念,並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔內發生。在多道程式環境下,併發性是指在一段時間內巨集觀上有多個程式在同時運行,但在單處理機系統中,每一時刻卻僅能有一道程式執行,故微觀上這些程式只能是分時地交替執行。倘若在電腦系統中有多個處理機,則這些可以併發執行的程式便可被分配到多個處理機上,實現並行執行,即利用每個處理機來處理一個可併發執行的程式,這樣,多個程式便可以同時執行。
三、IIS中的併發管理
1、IIS中併發相關術語、設置
▲連接數、併發連接數:這兩個概念網上的解釋都是說不同的,但通過實驗,筆者發現在IIS中他們一個概念,就是在對併發連接,即站點可以同時容納客戶請求的最高連接數做設置,而且我通過設置兩個參數發現會互相影響。可能網上說的連接數是專指虛擬主機的環境吧。
▲最大併發工作線程數:簡單的說就是IIS在併發連接請求過來時的處理機制,它會更機智的以某個數量級為單位來分批處理,讓沒有處理連接請求排隊等待。比如最大併發工作線程數設置為50,當200個連接請求過來時,50個請求被處理,剩下的150會顯示正在載入,而不是503的錯誤。這時其它用戶就不要點刷新按鈕了,因為點的越多,你的請求在排隊隊伍中越靠後。此項設置未在IIS中,而是修改ASP.NET配置文件machine.config(Win10預設位置:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\ 修改參考:https://msdn.microsoft.com/zh-cn/library/7w2sway1.aspx)
▲應用程式池的隊列長度:上一個概念提到請求排隊,那是不是讓所有未處理的都排隊呢,顯示是不合理的。通過此項可以設置排隊的數量,超過數量的仍然返回503錯誤,與超過併發連接數一樣的效果。
▲應用程式池的最大工作進程數:如果這個值大於 1,那麼當有連接請求時會啟動多個新的工作進程實例,可啟動的最多進程數為您所指定的最大工作進程數,後續更多的請求將以迴圈的方式發送至工作進程,這個 每個工作進程都能承擔負載一些連接請求,當然是以消耗cpu等硬體做代價,這是值得的,如果web伺服器cpu使用率很低但是又需要更高效的處理併發連接 請求,為何不這麼做呢?
如果網站中用到了依賴進程的Session和Cache等對象,則不能保存在伺服器記憶體中,存儲方式選用StateServer或者SQLServer會更好,另外多個工作進程切換時會有上下文複製,這也是資源消耗更多地方
最大工作進程數的設置方法:(拷貝)按照每工作進程能承載30個併發的原則來確定應用程式池的最大工作進程數。同時要註意,每個工作進程大約會占用 200M左右的系統記憶體,在設置最大工作進程數的時候,要主要最大工作進程數與200M的乘積不要超過系統最大可用記憶體數。一般情況下,建議按照每次增加 5個工作進程數的方式對最大工作進程數進行調整,調整完後對網站觀察一段時間,如依然無法滿足要求,再繼續增加5個工作進程數。
2、觀察併發連接數
a:命令行方式查看IIS連接請求的狀態統計
C:\>netstat -an |find "10.0.1.13:80" |find "ESTABLISHED" /C
1297
C:\>netstat -an |find "10.0.1.13:80" |find "TIME_WAIT" /C
129
b:利用nagios監控的windows客戶端工具NSClient++-0.2.7對相應的計數器進行監控,超過一定的閾值則通過fetion報警!
c:計數器的添加,利用計數器可以圖形化的展示出來。
步驟:運行命令 “perfmon.msc”打開性能監視器,點擊添加計數器。計數器對象選擇【Web Service】->【Current Connections】;對象實例選擇【_Total】,也可根據需要選擇具體的Web服務
實例;點擊【添加】按鈕,結果如下圖所示。
將和本監控無關的信息刪除,僅留下關心的Web服務信息。從多個客戶端發出併發請求,可以監控到實時的併發連接數。根據圖中顯示結果,不難發現當前同時刻併發連接數為5個。
可以通過右擊計數器打開屬性對圖表做一些設置,如顏色、步長等。
參考:http://blog.csdn.net/coolmeme/article/details/9997609
http://www.cnblogs.com/qmfsun/p/4997307.html
http://ylw6006.blog.51cto.com/470441/1058070/