最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一文給你解決單機百萬 TCP 連接測試源碼

2022-07-07 17:09 作者:補給站Linux內(nèi)核  | 我要投稿

測試百萬連接我用到的方法有兩種:

  • 第一種是服務(wù)器端只開啟一個進程,然后使用很多個客戶端 ip 來連接

  • 第二種是服務(wù)器開啟多個進程,這樣客戶端就可以只使用一個 ip 即可

咱們今天先來看第一種方法,另一種下次再發(fā)。源碼地址如下,需要手工復(fù)制~

源碼地址: https://github.com/yanfeizhang/coder-kung-fu/tree/main/tests/network/test01

鑒于整個實驗做起來還是有點小復(fù)雜,所以還是單獨寫一篇文章,配合源代碼一起,讓大家動手起來更輕松。

一、服務(wù)器準備

1.1 最大可打開文件句柄調(diào)整

先加大系統(tǒng)級最大句柄數(shù) fs.file-max 為大于 100 萬,注意要多打一點余量,干脆直接設(shè)置成 110 萬。另外同時要修改的還有系統(tǒng)進程級參數(shù) fs.nr_open, 也一起改成 110 萬。

sysctl -p 使得設(shè)置生效。并使用 sysctl -a 驗證是否真正生效

接著再加大用戶進程的最大可打開文件數(shù)量限制(nofile),這個是在 /etc/security/limits.conf 中配置。這兩個是用戶進程級的,可以按不同的用戶來區(qū)分配置。這里為了簡單,就直接配置成所有用戶 * 了。

注意 hard nofile 一定要比 fs.nr_open 要小,否則可能導(dǎo)致用戶無法登陸。

配置完后,開個新控制臺即可。使用 ulimit 命令校驗生效


1.2 啟動 server 開始監(jiān)聽

啟動 server


使用 netstat 命令確保 server 監(jiān)聽成功。

二、客戶端準備

2.1 調(diào)整可用端口范圍默認情況下,Linux 只開啟了 3 萬多個可用端口。但我們今天的實驗里,一個進程要達到 5 萬的并發(fā)。所以,端口范圍的內(nèi)核參數(shù)也是需要修改的。

執(zhí)行 sysctl -p 使之生效。

2.2 加大最大可打開文件數(shù)

和服務(wù)端對應(yīng),客戶端的 fs.file-max 也需要加大到 110 萬。不過進程級的參數(shù) fs.nr_open 設(shè)置到 60000 就夠了。

sysctl -p 使得設(shè)置生效。并使用 sysctl -a 查看是否真正生效

接著再加大用戶進程的最大可打開文件數(shù)量限制(nofile),和服務(wù)器中的配置方法一樣。不過由于客戶端我們是要開 20 個進程來測的,所以每個進程最大開到 5 萬個文件數(shù)就夠了。同樣預(yù)留一點余地,所以設(shè)置成 55000。

配置完后,開個新控制臺即可。使用 ulimit 命令校驗生效

2.3 挑選客戶端可用的新 ip

因為我們這次是要用單臺客戶端來連接同一個 server 的同一個端口。而單客戶端 ip 所能達到的最高連接數(shù)是受端口數(shù)量限制。最多只有 65535 - 1024 = 64k 個。

解決辦法之一就是使用 20 臺客戶端,每個客戶端發(fā)起 5 萬個連接同時來連接這一個server。通過這樣讓服務(wù)器能達到 100 萬條 TCP 并發(fā)。 但是這個方法實際操作起來太困難了,所以不可行。

另外一個辦法就是采用為一臺機器,在這個機器上配置多個 ip 的方式來搞。在 linux 上可以使用 ifconfig 命令為一臺機器配置多個 ip。例如你的 linux 上的網(wǎng)卡設(shè)備為 eth0,現(xiàn)在想配置一個別名為 eth0:1,ip 為 CIP1,掩碼為 255.255.248.0 。則配置 ip 的命令如下:

所以接下來的事情就是在你的網(wǎng)絡(luò)環(huán)境中尋找 20 個可用的 ip。假設(shè)可用的ip分別是 CIP1,CIP2,......,CIP20。

注意:配置的 ip 必須不能和局域網(wǎng)的其它機器沖突,否則會影響這些機器的正常網(wǎng)絡(luò)包的收發(fā)。

2.4 為客戶端配置新的 ip

確定了 ip 以后,則開始動手修改測試源碼 clientd.php 中的 $ips 數(shù)組,子網(wǎng)掩碼。

為了確保局域網(wǎng)內(nèi)沒有這些 ip,需要先執(zhí)行代碼中提供的一個小工具來驗證一下

當所有的 ip 的 ping 結(jié)果均為 false 時,方可進行下一步實驗。

配置所有 ip 并啟動網(wǎng)卡。

使用 ifconfig 命令查看 ip 是否配置成功。

ip 配置完成后,就可以進行下一步實驗了。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個人覺得比較好的學(xué)習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!?。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ? ? ??



三、開始連接實驗

修改 clientd.php 中的服務(wù)器 ip 和端口。然后開始連接

同時,另啟一個控制臺。使用 watch 命令來實時觀測 ESTABLISH 狀態(tài)連接的數(shù)量。

當然,實驗過程中不會一帆風順,可能會有各種意外情況發(fā)生。遇到問題別慌,根據(jù)錯誤提示看下是哪里不對。然后調(diào)整一下,重新做就是了。

重做的時候需要重啟客戶端和服務(wù)器。對于客戶端,殺掉所有的客戶端進程的方式是

對于服務(wù)器來說,就更簡單了,直接 ctrl + c 終止服務(wù)器進程,再重新啟動就行了。如果發(fā)現(xiàn)端口被占用,那是因為操作系統(tǒng)還沒有回收,等一會兒再啟動 server 就行。

當你發(fā)現(xiàn)連接數(shù)量超過 100 萬的時候,你的實驗就成功了。

這個時候別忘了查看一下你的服務(wù)端、客戶端的內(nèi)存開銷。

先用 cat proc/meminfo 查看,重點看 slab 內(nèi)存開銷。

再用 slabtop 查看一下內(nèi)核都是分配了哪些內(nèi)核對象,它們每個的大小各自是多少。


當你這個實驗真正做成功的時候,相信你能有很大的收獲!

四、結(jié)束實驗

實驗結(jié)束的時候,服務(wù)器進程直接 ctrl + c 取消運行就可以??蛻舳舜a可能需要手工關(guān)閉一下


最后記得取消為實驗臨時配置的新 ip


一文給你解決單機百萬 TCP 連接測試源碼的評論 (共 條)

分享到微博請遵守國家法律
金寨县| 阳曲县| 威宁| 偏关县| 尤溪县| 营山县| 香格里拉县| 沐川县| 阳高县| 如皋市| 婺源县| 佛山市| 九龙坡区| 保靖县| 新昌县| 阳新县| 林口县| 旌德县| 利津县| 林州市| 河北省| 云南省| 安远县| 金寨县| 桐柏县| 岱山县| 溧水县| 安达市| 建德市| 突泉县| 公安县| 沈丘县| 资阳市| 孙吴县| 葫芦岛市| 平远县| 华阴市| 扎赉特旗| 常德市| 堆龙德庆县| 玉屏|