首頁 >php框架 >Workerman >workerman怎麼實現高並發

workerman怎麼實現高並發

(*-*)浩
(*-*)浩原創
2019-12-05 10:21:364810瀏覽

workerman怎麼實現高並發

並發概念太模糊,這裡以兩個可以量化的指標並發連接數和並發請求數來說明。

並發連接數是指伺服器當下時刻總共維持了多少TCP連接,而這些連接上是否有資料通訊並不關注。 (建議學習: workerman教學

例如一台訊息推播伺服器上可能維持了百萬的設備連接,由於連接上很少有資料通訊,所以這台伺服器上負載可能幾乎為0,只要記憶體夠,還可以繼續接受連線。

影片課程推薦→:《千萬資料並發解決方案(理論實戰)》

並發請求數字一般用QPS(伺服器每秒處理多少請求)來衡量,而當前時刻伺服器上有多少tcp連線並不十分關注。例如一台伺服器只有10個客戶端連接,每個客戶端連接上每秒有1W個請求,那麼要求服務端需要至少能支撐10*1W=10W每秒的吞吐量(QPS)。

假設10W吞吐量每秒是這台伺服器的極限,如果每個客戶端每秒發送1個請求給服務端,那麼這台伺服器能夠支撐10W個客戶端。

並發連線數受限於伺服器內存,一般24G內存workerman伺服器可以支援大概120W並發連線。

並發請求數受限於伺服器cpu處理能力,一台24核心workerman伺服器可以達到45W每秒的吞吐量(QPS),實際值根據業務複雜度以及程式碼品質有所變化。

注意

高並發場景必須安裝event或libevent擴充功能。另外需要優化linux內核,尤其是進程開啟檔數限制。

壓測資料

這裡僅提供workerman壓測的QPS資料參考。

測試環境:

系統:debian 6.0 64位元

記憶體:64G

cpu:Intel(R ) Xeon(R) CPU E5-2420 0 @ 1.90GHz (2顆物理cpu,6核心,2線程)

Workerman:開啟200個Benchark進程

壓測腳本:benchmark

業務:發送並傳回hello字串

普通PHP(版本5.3.10)壓測

短連接(每次請求完成後關閉連接,下次請求建立新的連接):

條件: 壓測腳本開500個並發線程模擬500個並髮用戶,每個線程連接Workerman 10W次,每次連接發送1個請求

結果: 吞吐量:2.3W/S , cpu利用率:36%

長連接(每次請求後不關閉連接,下次請求繼續復用這個連線):

    條件: 壓測腳本開啟2000個同時執行緒模擬2000個並髮用戶,每個執行緒連接Workerman 1次,每個連線發送10W請求

    結果:吞吐量:36.7W/S , cpu利用率:69%

內存:每個進程內存穩定在6444K,無內存洩漏

以上是php5.3版本壓測數據,如果用php7,效能會再提升40%左右。

HHVM環境壓力測試

短連接(每次請求完成後關閉連接,下次請求建立新的連接):

條件: 壓測腳本開1000個並發線程模擬1000個並髮用戶,每個線程連接Workerman 10W次,每次連接發送1個請求

結果: 吞吐量:3.5 W/S , cpu利用率:35%

長連接(每次請求後不關閉連接,下次請求繼續復用這個連接):

    條件: 壓測腳本開6000個同時執行緒模擬6000個同時用戶,每個執行緒連接Workerman 1次,每個連線發送10W請求

    結果: 吞吐量:45W/S , cpu利用率:67%#######記憶體:HHVM環境每個進程記憶體穩定在46M,無記憶體洩漏###

以上是workerman怎麼實現高並發的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:workerman怎麼用下一篇:workerman怎麼用