国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

實(shí)現(xiàn)單臺(tái)測(cè)試機(jī)6萬websocket長(zhǎng)連接

marser / 2918人閱讀

摘要:本文是我在測(cè)試過程中的記錄,實(shí)現(xiàn)了單臺(tái)測(cè)試機(jī)發(fā)起最大的長(zhǎng)連接數(shù)。也就是說,一臺(tái)機(jī)器一個(gè)只能創(chuàng)建六萬多個(gè)長(zhǎng)連接。四后續(xù)展望我的測(cè)試目標(biāo)不是實(shí)現(xiàn)單臺(tái)萬的連接數(shù)。或者借用更多的機(jī)器數(shù),每臺(tái)機(jī)器維持萬連接。文章來源網(wǎng)易云社區(qū)

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

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

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

本文采用的測(cè)試機(jī)分別為黑mac系統(tǒng)和linux系統(tǒng)(由于黑mac機(jī)器本身性能問題,最大只能達(dá)到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、測(cè)試腳本是一個(gè)進(jìn)程,開啟上萬個(gè)長(zhǎng)連接,還需要修改單個(gè)進(jìn)程的最大連接數(shù)。

命令:sysctl kern.maxfilesperproc

說明:?jiǎn)蝹€(gè)進(jìn)程默認(rèn)最大連接數(shù)限制是10240

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

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

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

命令:ulimit -n

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

修改大小:ulimit -n 1048576

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

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

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

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

修改大小:sudo sysctl net.inet.ip.portrange.first=1024

5、按以上的方式設(shè)置參數(shù)有個(gè)問題,當(dāng)系統(tǒng)重啟后,這些參數(shù)又恢復(fù)成了默認(rèn)值,解決辦法就是把參數(shù)寫到/etc/sysctl.conf文件中,但是,默認(rèn)這個(gè)文件是不存在的,所以首先就要?jiǎng)?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中實(shí)現(xiàn)自動(dòng)修改。

二、測(cè)試腳本

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

測(cè)試腳本如下:

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);

}

三、測(cè)試結(jié)果

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

四、后續(xù)展望

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

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

更多網(wǎng)易技術(shù)、產(chǎn)品、運(yùn)營(yíng)經(jīng)驗(yàn)分享請(qǐng)?jiān)L問網(wǎng)易云社區(qū)。

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/25364.html

相關(guān)文章

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

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

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

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

    Barry_Ng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<