什么是服務器并發處理能力
一臺服務器在單位時間里能處理的請求越多,服務器的能力越高,也就是服務器并發處理能力越強
有什么方法衡量服務器并發處理能力
1. 吞吐率
吞吐率,單位時間里服務器處理的最大請求數,單位req/s
2. 壓力測驗
有一個原理一定要先搞清楚,假如100個用戶同時向服務器分別進行10個請求,與1個用戶向服務器連續進行1000次請求,對服務器的壓力是一樣嗎?實際上是不一樣的,因對每一個用戶,連續發送請求實際上是指發送一個請求并接收到回應資料后再發送下一個請求。這樣對于1個用戶向服務器連續進行1000次請求, 任何時刻服務器的網卡接識訓沖區中只有1個請求,而對于100個用戶同時向服務器分別進行10個請求,服務器的網卡接識訓沖區最多有100個等待處理的請求,顯然這時的服務器壓力更大。
壓力測驗中關心的時間又細分以下2種:
用戶平均請求等待時間(這里暫不把資料在網路的傳輸時間,還有用戶PC本地的計算時間計算入內)一般來說,用戶平均請求等待時間 = 服務器平均請求處理時間 * 并發用戶數
服務器平均請求處理時間
怎么提高服務器的并發處理能力
1. 提高CPU并發計算能力
服務器之所以可以同時處理多個請求,在于作業系統通過多執行流體系設計使得多個任務可以輪流使用系統資源,這些資源包括CPU,記憶體以及I/O. 這里的I/O主要指磁盤I/O, 和網路I/O。
2. 考慮減少記憶體分配和釋放
服務器的作業程序中,需要大量的記憶體,使得記憶體的分配和釋放作業尤為重要。
例如Apache,在運行開始時一次申請大片的記憶體作為記憶體池,若隨后需要時就在記憶體池中直接獲取,不需要再次分配,避免了頻繁的記憶體分配和釋放引起的記憶體整理時間。
再如Nginx使用多執行緒來處理請求,使得多個執行緒之間可以共享記憶體資源,從而令它的記憶體總體使用量大大減少,另外,nginx分階段的記憶體分配策略,按需分配,及時釋放,使得記憶體使用量保持在很小的數量范圍。
3. 考慮使用持久連接
持久連接也為長連接,它本身是TCP通信的一種普通方式,即在一次TCP連接中持續發送多分資料而不斷開連接,在允許的情況下,連接次數越少,越有利于性能的提升; 尤其對于密集型的圖片或網頁等小資料請求處理有明顯的加速所用。
HTTP長連接需要瀏覽器和web服務器的共同協作,目前瀏覽器普遍支持長連接,表現在其發出的HTTP請求資料頭中包含關于長連接的宣告,如下: Connection: Keep-Alive
主流的web服務器都支持長連接,比如apache中,可以用KeepAlive off關閉長連接。
Apache的默認設定為5s, 若這個時間設定過長,則可能導致資源無效占有,維持大量空閑行程,影響服務器性能。
4. 改進I/O 模型
I/O操作根據設備的不同分為很多型別,比如記憶體I/O, 網路I/O, 磁盤I/O. 對于網路I/O和磁盤I/O, 它們的速度要慢很多,盡管使用RAID磁盤陣列可通過并行磁盤磁盤來加快磁盤I/O速度,購買大連獨享網路帶寬以及使用高帶寬網路配接器可以提高網路i/O的速度。但這些I/O操作需要內核系統呼叫來完成,這些需要CPU來調度,這使得CPU不得不浪費寶貴的時間來等待慢速I/O操作。我們希望讓CPU足夠少的時間在i/O操作的調度上,如何讓高速的CPU和慢速的I/O設備更好地協調作業,是現代計算機一直探討的話題。各種I/O模型的本質區別在于CPU的參與方式。
1. DMA技術
2. 異步I/O
3. I/O多路復用
4. Sendfile
5. 記憶體映射
6. 直接I/O
5. 改進服務器并發策略
服務器并發策略的目的,是讓I/O操作和CPU計算盡量重疊進行,一方面讓CPU在I/O等待時不要空閑,另一方面讓CPU在I/O調度上盡量花最少的時間。
一個行程處理一個連接,非阻塞I/O
這樣會存在多個并發請求同時到達時,服務器必然要準備多個行程來處理請求。其行程的開銷限制了它的并發連接數。但從穩定性和兼容性的角度,則其相對安全,任何一個子行程的崩潰不會影響服務器本身,父行程可以創建新的子行程;這種策略典型的例子就是Apache的fork和prefork模式。對于并發數不高(如150以內)的站點同時依賴Apache其它功能時的應用選擇Apache還是可以的。
一個執行緒處理一個連接,非阻塞IO
這種方式允許在一個行程中通過多個執行緒來處理多個連接,一個執行緒處理一個連接。Apache的worker模式就是這種典型例子,使其可支持更多的并發連接。不過這種模式的總體性能還不如prefork,所以一般不選用worker模式。
一個行程處理多個連接,異步I/O
一個執行緒同時處理多個連接,潛在的前提條件就是使用IO多路復用就緒通知。
這種情況下,將處理多個連接的行程叫做worker行程或服務行程。worker的數量可以配置,如Nginx中的worker_processes 4。
一個執行緒處理多個連接,異步IO
即使有高性能的IO多路復用就緒通知,但磁盤IO的等待還是無法避免的。更加高效的方法是對磁盤檔案使用異步IO,目前很少有Web服務器真正意義上支持這種異步IO。
6. 改進硬體環境
目前先講述這么多,后期有關于服務器其他方面可以一起溝通!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/72490.html
標籤:移動開發其他問題
