socat與Brook 端口轉發非權威對比測試結果

網上關于端口轉發軟件的評測非常少,最近正好將socat與Brook都打包為了Docker鏡像,今天先用他兩來比一比,測一測,看看到底誰的效率更好一些。(非權威測試,結果僅供參考)

測試環境

已經在目標服務器163.172.35.xxx安裝好了WebServer(Nginx),同時在中繼服務器137.175.30.xxx上分別部署了socat和brook進行端口轉發到目標的80端口上,信息如下。

  • 目標服務器:163.172.35.xxx:80

  • 中繼服務器:137.175.30.xxx:32771(socat)

  • 中繼服務器:137.175.30.xxx:32770(brook)

  • 美洽在線客服系統

初始環境(第一輪)

socat與Brook均是通過Docker方式部署,部署完畢后,沒有任何連接的情況下,內存占用情況如下。

socat占用內存不到800Kb

socat與Brook 端口轉發非權威對比測試結果的圖1socat與Brook 端口轉發非權威對比測試結果的圖2

Brook占用1.8Mb內存

socat與Brook 端口轉發非權威對比測試結果的圖3socat與Brook 端口轉發非權威對比測試結果的圖4

hey進行HTTP壓力測試(第二輪)

接下來通過hey工具分別對兩個不同的轉發端口進行HTTP并發壓力測試,測試命令為:

./hey -n 10000 -c 1000 -m GET http://xxx/

socat與Brook 端口轉發非權威對比測試結果的圖5

上面命令是對中繼服務器發起10000個請求,客戶端并發連接數為1000


socat壓測結果:最高內存占用154Mb,最高CPU使用率32%,耗時67s,平均耗時1.5347s,錯誤次數238

Summary:
  Total:        67.5975 secs
  Slowest:      19.9194 secs
  Fastest:      0.3516 secs
  Average:      1.5347 secs
  Requests/sec: 147.9345

Response time histogram:
  0.352 [1]     |
  2.308 [8318]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4.265 [738]   |■■■■
  6.222 [227]   |■
  8.179 [166]   |■
  10.136 [100]  |
  12.092 [48]   |
  14.049 [53]   |
  16.006 [31]   |
  17.963 [39]   |
  19.919 [41]   |

Latency distribution:
  10% in 0.3608 secs
  25% in 0.3721 secs
  50% in 0.7243 secs
  75% in 1.4874 secs
  90% in 3.3814 secs
  95% in 6.0845 secs
  99% in 14.1610 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0225 secs, 0.3516 secs, 19.9194 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:    0.0001 secs, 0.0000 secs, 0.0309 secs
  resp wait:    1.4584 secs, 0.3515 secs, 19.9191 secs
  resp read:    0.0002 secs, 0.0001 secs, 0.0270 secs

Status code distribution:
  [200] 9762 responses

Error distribution:
  [238] Get "http://137.175.30.xxx:32771/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

socat與Brook 端口轉發非權威對比測試結果的圖6

socat與Brook 端口轉發非權威對比測試結果的圖7socat與Brook 端口轉發非權威對比測試結果的圖8

brook壓測結果:最高內存占用25Mb,最高CPU使用率64%,總耗時44s,平均耗時1.0304s,錯誤次數67

Summary:
  Total:        44.2130 secs
  Slowest:      19.4560 secs
  Fastest:      0.3522 secs
  Average:      1.0304 secs
  Requests/sec: 226.1777

Response time histogram:
  0.352 [1]     |
  2.263 [9106]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4.173 [528]   |■■
  6.083 [158]   |■
  7.994 [69]    |
  9.904 [22]    |
  11.814 [17]   |
  13.725 [7]    |
  15.635 [11]   |
  17.546 [9]    |
  19.456 [5]    |

Latency distribution:
  10% in 0.3605 secs
  25% in 0.3687 secs
  50% in 0.5565 secs
  75% in 1.0805 secs
  90% in 2.0481 secs
  95% in 2.8718 secs
  99% in 7.2565 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0192 secs, 0.3522 secs, 19.4560 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:    0.0001 secs, 0.0000 secs, 0.0117 secs
  resp wait:    0.9539 secs, 0.3519 secs, 19.4558 secs
  resp read:    0.0002 secs, 0.0001 secs, 0.0316 secs

Status code distribution:
  [200] 9933 responses

Error distribution:
  [67]  Get "http://137.175.30.xxx:32770/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)

socat與Brook 端口轉發非權威對比測試結果的圖9

socat與Brook 端口轉發非權威對比測試結果的圖10socat與Brook 端口轉發非權威對比測試結果的圖11

以上結果xiaoz反復壓測了幾次,數據方向基本一致。

axel多線程下載測試(第三輪)

測試命令

time axel -n 32 "http://137.175.30.xxx:32771/test"

socat與Brook 端口轉發非權威對比測試結果的圖12

測試文件為200M,使用axel開啟32線程進行下載。


socat測試結果:耗時48m44s,最高內存占用5.8Mb左右。

real    48m44.111s
user    0m1.934s
sys     0m10.616s

socat與Brook 端口轉發非權威對比測試結果的圖13

socat與Brook 端口轉發非權威對比測試結果的圖14socat與Brook 端口轉發非權威對比測試結果的圖15

Brook測試結果:耗時36m3.646s,最高內存占用2.9Mb左右。

real    36m3.646s
user    0m1.730s
sys     0m8.930s

socat與Brook 端口轉發非權威對比測試結果的圖16

socat與Brook 端口轉發非權威對比測試結果的圖17socat與Brook 端口轉發非權威對比測試結果的圖18

數據匯總

軟件名稱/測試項 socat brook
初始內存 800Kb 1.8Mb
hey壓測(耗時) 67s 44s
hey壓測(max(cpu)) 32% 64%
hey壓測(錯誤次數) 238 67
hey壓測(max(mem)) 154Mb 25Mb
axel 32線程下載(耗時) 48m44s 36m3s
axel 32線程下載(max(mem)) 5.8Mb 2.9Mb
  • 初始內存socat占用比brook更低

  • 高并發情況下socat內存占用比brook更高

  • 高并發情況下brook CPU占用比socat更高

  • 多線程下載,brook效率好于socat

總結

以上結果僅針對HTTP轉發進行壓測,由于環境、網絡等多方面因素影響,也沒仔細研究socat參數,不保障數據100%準確性,有興趣的同學可以自行測試,針對以上測試數據,xiaoz給出的建議如下。

后續將對其它端口轉發軟件做對比測試,敬請關注。

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP