.Net Core Socket 壓力測試


.Net Core Socket 壓力測試

 

想起之前同事說go lang寫的push service單機可以到達80萬連接,於是就想測試下.Net Core能達到多少。簡單地寫了全異步的服務端和客戶端代碼(未作任何優化)。測試環境只是筆記本18萬連接CPU點26%左右內存點1.2G,目測放到服務器上80萬還是有希望。

 

一、測試代碼

服務端:啟動TcpListener監聽,異步接受客戶端連接AcceptTcpClientAsync。連接到達后異步讀取客戶端數據,收到數據后原封不動發送到客戶端。
客戶端:啟動60個任務,每個任務依次異步連接到服務端,連接后啟動數據收發任務,在收發任務中先改送140bytes左右的數據到服務端再讀取服務端返回的數據,等待30s(Task.Delay)后循環前端的收發等待步驟。共60000個連接。
數據統計:服務端客戶端中都有相應的數據統計,統計數據有:已連接Socket數量、發送的數據包總數、接收數據包數總數。
代碼地址:https://github.com/chrishaly/TcpStressTest

二、測試方式
服務端:Windows 10,運行服務程序。
客戶端:(1)Windows 10和服務端同一機器(2)Windows Server 2012 R2 - VMWare(3)Windows 7 - VMWare。由於Winodws對連接數有限制需要修改注冊表增大連接數HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下添加DWORD值 MaxUserPort=65534。在客戶端主機上運行客戶端程序。3個客戶端各6萬連接只18萬連接

 

三、環境及結果(各進程詳情)

主機

配置

Socket連接數

CPU占用

內存占用

服務端

筆記本i7-4720HQ, 16G內存

17.99萬

19% ~36%

 1.2G

客戶端Win 10

筆記本i7-4720HQ, 16G內存

6萬

5%

241M

客戶端 Win 2012

VMWare 1 CPU 1 Core, RAM 2G

6萬

8%左右

318M

客戶端 Win 7

VMWare 1 CPU 4 Core, RAM 2G

5.99萬

8%左右

258M

四、遇到的一些問題:主要也就Socket連接數限制,Windows上修改注冊表即可。

五、插曲:客戶端本來是要用Linux的,先是用了Debian 8.6 x64連接數達到1.6萬左右出現了問題,找了下Debian最大連接數ulimit –a沒有限制,就沒繼續找原因了。果斷開了Ubuntu Server 16.04 TLS連接也是1.6萬左右出現了AddressAlreadyInUse的異常,然后又試了桌面版的Ubuntu 16.04 TLS也有此問題。目的是測試虛擬機太多了另外換一個吧,就用了VMWare Win 7, VMWare Windows Server 2012 R2。Debian、Ubuntu連接數據的問題以后再看。

 

六、有圖有真相: 4個運行窗口左上角那個是服務端

 


服務進程情況:PID為19944的為服務進程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM