- 論壇徽章:
- 2
|
我需要測試自己寫的服務(wù)器程序的吞吐能力:
每秒能夠成功接收客戶端連接(3次握手)的極限值
我的想法是:
1. 測試服務(wù)器的吞吐能力不能摻雜網(wǎng)絡(luò)因素, 比如因?yàn)榫W(wǎng)速限制導(dǎo)致服務(wù)器每秒監(jiān)聽到的網(wǎng)絡(luò)事件數(shù)量受限, 所以測試的時(shí)候服務(wù)器和客戶端應(yīng)該在同一臺(tái)機(jī)器上進(jìn)行;
2. 寫一個(gè)客戶端程序, fork出多進(jìn)程或多線程, 每一個(gè)子進(jìn)程或線程向服務(wù)器發(fā)起n個(gè)連接
3. 服務(wù)器設(shè)置一個(gè)計(jì)時(shí)器, 每秒打印接受到的連接數(shù)量
實(shí)際中我嘗試(10個(gè), 20個(gè), 50個(gè), 100個(gè))線程, 每個(gè)線程向服務(wù)器發(fā)起1000個(gè)連接, 調(diào)用的connect函數(shù)為阻塞式的(非阻塞的connect也試過, 不知為何很多連接都失敗了), 結(jié)果: 服務(wù)器最高可以每秒成功接受差不多15000個(gè)連接
我看網(wǎng)上經(jīng)常出現(xiàn)的高并發(fā)服務(wù)器聲稱每秒能接受幾十萬個(gè)連接, 因此我有些疑惑, 到底是服務(wù)器程序有問題, 還是客戶端的測試方式有問題, 或者兩者都有問題?
最后, 請教一下大家通常是如何測試服務(wù)器的并發(fā)能力的?
我的服務(wù)器程序很簡單, 單線程, 一個(gè)while循環(huán), 不斷調(diào)用accept接受連接, 每次成功accept一個(gè)連接, 每秒接受的連接計(jì)數(shù)加一.- while true:
- int conn_fd = accept(listen_fd)
- n_connection ++
復(fù)制代碼 |
|