亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

實現(xiàn)單臺測試機6萬websocket長連接

marser / 3037人閱讀

摘要:本文是我在測試過程中的記錄,實現(xiàn)了單臺測試機發(fā)起最大的長連接數(shù)。也就是說,一臺機器一個只能創(chuàng)建六萬多個長連接。四后續(xù)展望我的測試目標(biāo)不是實現(xiàn)單臺萬的連接數(shù)?;蛘呓栌酶嗟臋C器數(shù),每臺機器維持萬連接。文章來源網(wǎng)易云社區(qū)

本文由作者鄭銀燕授權(quán)網(wǎng)易云社區(qū)發(fā)布。

本文是我在測試過程中的記錄,實現(xiàn)了單臺測試機發(fā)起最大的websocket長連接數(shù)。在一臺測試機上,連接到一個遠(yuǎn)程服務(wù)時的本地端口是有限的。根據(jù)TCP/IP協(xié)議,由于端口是16位整數(shù),也就只能是0到 65535,而0到1023是預(yù)留端口,所以能分配的端口只是1024到65534,也就是64511個。也就是說,一臺機器一個IP只能創(chuàng)建六萬多個websocket長連接。

一、客戶端參數(shù)調(diào)優(yōu)

本文采用的測試機分別為黑mac系統(tǒng)和linux系統(tǒng)(由于黑mac機器本身性能問題,最大只能達到2萬連接,于是換用linux)。下面先以mac系統(tǒng)為例,闡述下客戶端參數(shù)調(diào)優(yōu),linux系統(tǒng)類似,這里不做闡述。

1、修改全局限制,系統(tǒng)默認(rèn)的最大連接數(shù)限制

命令:sysctl kern.maxfiles

說明:全局限制,也就是系統(tǒng)默認(rèn)的最大連接數(shù)限制是12288

修改大?。?sudo sysctl -w kern.maxfiles=1048600

說明:設(shè)置系統(tǒng)最大連接數(shù)從12288到1048600

2、測試腳本是一個進程,開啟上萬個長連接,還需要修改單個進程的最大連接數(shù)。

命令:sysctl kern.maxfilesperproc

說明:單個進程默認(rèn)最大連接數(shù)限制是10240

修改大小:sudo sysctl -w kern.maxfilesperproc=1048576

說明:設(shè)置進程連接數(shù)限制,進程的最大連接數(shù)要小于等于全局連接數(shù)

3、由于客戶端與服務(wù)端需要建立大量的socket,所以我們需要調(diào)速一下最大文件描述符。

命令:ulimit -n

說明:“ulimit -n”命令顯示當(dāng)前shell能打開的最大文件數(shù),默認(rèn)值:256,該值總是小于kern.maxfilesperproc的值,因為一個shell就是一個進程。

修改大小:ulimit -n 1048576

說明:設(shè)置當(dāng)前shell能打開的最大文件數(shù)為1048576,該值不能大于kern.maxfilesperproc,否則會提示設(shè)置失敗。

4、由于系統(tǒng)默認(rèn)參數(shù),自動分配的端口數(shù)有限,所以我們需要更改客戶端ip端口號的參數(shù)

命令:sysctl net.inet.ip.portrange,查詢得到的系統(tǒng)默認(rèn)的端口號分配如下:

將可分配的首個端口號設(shè)置為1024

修改大?。簊udo sysctl net.inet.ip.portrange.first=1024

5、按以上的方式設(shè)置參數(shù)有個問題,當(dāng)系統(tǒng)重啟后,這些參數(shù)又恢復(fù)成了默認(rèn)值,解決辦法就是把參數(shù)寫到/etc/sysctl.conf文件中,但是,默認(rèn)這個文件是不存在的,所以首先就要創(chuàng)建它:

sudo touch /etc/sysctl.conf

然后把參數(shù)寫到文件里

kern.maxfiles=1048600

kern.maxfilesperproc=1048576

net.inet.ip.portrange.first=1024

net.inet.ip.portrange.last=65535

重啟系統(tǒng),查看結(jié)果,顯示成功。

至于ulimit -n的值,可以把ulimit -n 1048576 寫到.bashrc中實現(xiàn)自動修改。

二、測試腳本

客戶端腳本采用nodejs編寫,之所以不采用jmeter的方式,是因為jmeter每個連接都是線程的方式,而單臺測試機最好保持開啟1000個以內(nèi)的線程,否則機器容易崩潰。

測試腳本如下:

var cwd = process.cwd();var WebSocketClient = require("websocket").client;var size = 10000;var host = "example.com:80";var port = 443;var authInterval = 10;var index = 0;

setInterval(function(){ if(index < size){

        uid = index;
        cid = index;
        init(uid, cid);
        index++;
    }

},authInterval);console.log("begin...");
init = function(uid, cid){ var client = new WebSocketClient();

client.connect("ws://XX.XX.XX.XX:XXXX/ws?token="+index,"","http://example.com:80");
client.on("connectFailed", function(error) {        console.log("Connect Error: " + error.toString());
});

client.on("connect", function(connection) {        console.log(index+" Connected");
    connection.on("error", function(error) {            console.log("Connection Error: " + error.toString());
    });
    connection.on("close", function(error) {            console.log(error + ";  Connection Closed");            //client.close();
        reconnect();
    });
    connection.on("message", function(message) {
        
    });
});

};function timeLogout(){ return setTimeout(function (){

    logout(uid);
}, StartTime);

}

三、測試結(jié)果

在相應(yīng)的目錄下輸入命令node websocket.js,即可建立websocket連接。由于機器性能問題,連接數(shù)達到2w左右,就無法建立新的連接了。后面將機器改成云主機,可以達到6萬的連接數(shù)。

四、后續(xù)展望

我的測試目標(biāo)不是實現(xiàn)單臺6萬的連接數(shù)。我的目標(biāo)是可以達到百萬級穩(wěn)定的長連接,并且可以向websocket服務(wù)器收發(fā)信息,計算每個消息從服務(wù)器發(fā)送到客戶端接收的平均耗時時間,以及查看建立百萬級連接,服務(wù)器的內(nèi)存和cpu的使用情況。最終限制于機器的性能,暫時還沒做到。并且業(yè)務(wù)需求繁忙,這個測試就暫時告一段落了。后續(xù)想要通過使用虛擬IP的方式來實現(xiàn)百萬級連接,比如增加了18個IP地址,這樣就可以產(chǎn)生18 * 60000 = 1080000個連接。或者借用更多的機器數(shù),每臺機器維持6萬連接。

免費領(lǐng)取驗證碼、內(nèi)容安全、短信發(fā)送、直播點播體驗包及云服務(wù)器等套餐

更多網(wǎng)易技術(shù)、產(chǎn)品、運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。

文章來源: 網(wǎng)易云社區(qū)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/25364.html

相關(guān)文章

  • 物聯(lián)網(wǎng)高并發(fā)編程之單臺服務(wù)器最大并發(fā)TCP連接數(shù)

    摘要:對端,通過增加內(nèi)存修改最大文件描述符個數(shù)等參數(shù),單機最大并發(fā)連接數(shù)超過萬甚至上百萬是沒問題的,國外公司在產(chǎn)品環(huán)境中已做到萬并發(fā) [TOC] 前言 曾幾何時我們還在尋求網(wǎng)絡(luò)編程中C10K問題的解決方案,但是現(xiàn)在從硬件和操作系統(tǒng)支持來看單臺服務(wù)器支持上萬并發(fā)連接已經(jīng)沒有多少挑戰(zhàn)性了。 我們先假設(shè)單臺服務(wù)器最多只能支持萬級并發(fā)連接,其實對絕大多數(shù)應(yīng)用來說已經(jīng)遠(yuǎn)遠(yuǎn)足夠了,但是對于一些擁有很大用...

    leap_frog 評論0 收藏0
  • 記一次性能優(yōu)化,單臺4核8G機器支撐5QPS

    摘要:前言這篇文章的主題是記錄一次程序的性能優(yōu)化,在優(yōu)化的過程中遇到的問題,以及如何去解決的。因為我們的連接數(shù)只有,一旦請求過多,勢必會導(dǎo)致數(shù)據(jù)庫瓶頸。我們再次壓測,結(jié)果顯示萬,服務(wù)器數(shù)據(jù)庫連接正常,連接正常,響應(yīng)時間平均為,錯誤率為。 前言 這篇文章的主題是記錄一次Python程序的性能優(yōu)化,在優(yōu)化的過程中遇到的問題,以及如何去解決的。為大家提供一個優(yōu)化的思路,首先要聲明的一點是,我的方式...

    Barry_Ng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<