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


Brook占用1.8Mb內存


hey進行HTTP壓力測試(第二輪)
接下來通過hey工具分別對兩個不同的轉發端口進行HTTP并發壓力測試,測試命令為:
./hey -n 10000 -c 1000 -m GET http://xxx/

上面命令是對中繼服務器發起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)



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)



以上結果xiaoz反復壓測了幾次,數據方向基本一致。
axel多線程下載測試(第三輪)
測試命令
time axel -n 32 "http://137.175.30.xxx:32771/test"

測試文件為200M,使用axel開啟32線程進行下載。
socat測試結果:耗時48m44s,最高內存占用5.8Mb左右。
real 48m44.111s user 0m1.934s sys 0m10.616s



Brook測試結果:耗時36m3.646s,最高內存占用2.9Mb左右。
real 36m3.646s user 0m1.730s sys 0m8.930s



數據匯總
| 軟件名稱/測試項 | 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給出的建議如下。
如果是個人少量使用,并且機器配置較低的情況下建議socat
如果并發較大,要求更高的效率,建議選擇brook
后續將對其它端口轉發軟件做對比測試,敬請關注。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















