校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 如何測試Linux下tcp最大連接數限制詳解

如何測試Linux下tcp最大連接數限制詳解

熱門標簽:廣東如何申請400電話 寧波400電話辦理對企業的意義 400電話申請要什么條件 北京人工外呼系統廠家 燃氣管線地圖標注顏色 哈爾濱400電話去哪辦理 話術外呼系統 i智能電話機器人yeta 西柏坡地圖標注

前言

關于TCP服務器最大并發連接數有一種誤解就是“因為端口號上限為65535,所以TCP服務器理論上的可承載的最大并發連接數也是65535”。

先說結論:對于TCP服務端進程來說,他可以同時連接的客戶端數量并不受限于可用端口號。并發連接數受限于linux可打開文件數,這個數是可以配置的,可以非常大,所以實際上受限于系統性能。

現在做服務器開發不加上高并發根本沒臉出門,所以為了以后吹水被別人懟“天天提高并發,你自己實現的最高并發是多少”的時候能義正言辭的懟回去,趁著元旦在家沒事決定自己寫個demo搞一搞。

這個測試主要是想搞明白Linux下哪些參數配置限制了連接數的最大值,上限是多少。

一、先說下demo的思路:

服務端用epoll實現,就是簡簡單單的接收連接,然后客戶端用go的goroutine,每個goroutine就是簡單的建立連接,然后什么也不做。

上代碼:

server:

/*
 * g++ -o test_epoll ./test_epoll.c
 */
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/epoll.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int SetReuseAddr(int fd)
{
 int optval = 1;
 socklen_t optlen = sizeof(optval);
 return setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, optlen);
}

int main()
{
 int fd = socket(AF_INET, SOCK_STREAM, 0);
 int iRet = SetReuseAddr(fd);
 if (iRet != 0)
 {
 printf("setsockopt for SO_REUSEADDR failed, error:%s\n", strerror(iRet));
 return iRet;
 }

 struct sockaddr_in addr;
 memset(&addr, 0, sizeof(addr));
 addr.sin_family = AF_INET;
 addr.sin_port = htons(8080);
 addr.sin_addr.s_addr = INADDR_ANY;
 if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1)
 {
 printf("bind failed, error:%s\n", strerror(errno));
 return errno;
 }

 if (listen(fd, 5) == -1)
 {
 printf("listen failed, error:%s\n", strerror(errno));
 return errno;
 }
 printf("Listening on 8080...\n");

 int epfd = epoll_create(102400);
 struct epoll_event event;
 event.events = EPOLLIN;
 event.data.fd = fd;
 epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);

 struct epoll_event revents[102400];
 int iOnline = 0;
 while (1)
 {
 int num = epoll_wait(epfd, revents, 102400, 60 * 1000);
 printf("epoll_wait return %d\n", num);
 if (num > 0)
 {
  for (int i = 0; i < num; i++)
  {
  if (revents[i].data.fd == fd)
  {
   int client;
   struct sockaddr_in cli_addr;
   socklen_t cli_addr_len = sizeof(cli_addr);
   client = accept(fd, (struct sockaddr*)&cli_addr, &cli_addr_len);
   if (client == -1)
   {
   printf("accept failed, error:%s\n", strerror(errno));
   if (errno == EMFILE)
   {
    printf("per-process limit reached\n");
    exit(errno);
   }
   if (errno == ENFILE)
   {
    printf("system-wide limit reached\n");
    exit(errno);
   }
   continue;
   }

   iOnline++;
   printf("Receive a new connection from %s:%d\n", inet_ntoa(cli_addr.sin_addr), cli_addr.sin_port);
   event.events = EPOLLIN;
   event.data.fd = client;
   epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
  }
  }
 }
 printf("Online number:%d\n", iOnline);
 }

 return 0;
}

client:

package main

import (
 "net"
 "fmt"
 "time"
 "strconv"
 "runtime"
)

func Connect(host string, port int) {
 _, err := net.Dial("tcp", host+":"+strconv.Itoa(port))
 if err != nil {
 fmt.Printf("Dial to %s:%d failed\n", host, port)
 return
 }

 for {
 time.Sleep(30 * 1000 * time.Millisecond)
 }
}

func main() {
 count := 0
 for {
 go Connect("192.168.63.128", 8080)
 count++;
 fmt.Printf("Gorutue num:%d\n", runtime.NumGoroutine())
 time.Sleep(100 * time.Millisecond)
 }
}

二、開始測試

第一次:

先說結果,連接數達到1031時accept失敗了,當時還沒有對errno做判斷,所以只打印輸出了accept失敗。

然后首先想到的是ulimit -n的限制,查看了一下,默認值1024,然后就是修改這個值,在/etc/security/limits.conf中添加一下內容:

1 * soft nofile 102400
2 * hard nofile 102400

然后關閉當前xshell連接,重新連接即生效,現在看ulimit -n就是102400了。

這兩行的意思就是將每個進程能打開的文件描述符個數的soft、hard限制調整為102400,

注:ulimit -n 102400也可以生效,但是這個修改是臨時的。

然后進行第二次測試。

第二次:

逗比了,其實連接數只有2000+,我之前還在奇怪為啥Windows的默認連接數能有這么高呢,原來有些連接已經斷了,但是因為我沒有做處理,所以以為還在呢,看來我得再安裝一個虛擬機了[二哈]

待繼續。。。

安裝虛擬機去,

時間:2017-12-31 00:09:00

虛擬機安裝好了,接著搞,

這次是真的超過10K了。

連接數還在增加,不知道能不能最終達到10萬呢,小小的期待ing

時間:2017-12-31 00:41:00,最終上限卡在28232,golang一直報dial失敗,由于忘了打印出具體錯誤信息了,所以無從知道為什么dial失敗,所以只能再跑一次T_T

 時間:2017-12-31 01:01:00,添加打印dial失敗的錯誤信息的,又跑了一遍,還是在28232時出現dial失敗,錯誤信息:

golang的標準庫文檔中么有對錯誤信息的解釋,從錯誤信息來看,是分配地址失敗,于是想是不是端口地址范圍限制了。

查看了一下端口地址范圍,確認就是這個限制,由于端口地址是16位,所以,就算把這個端口地址范圍修改為1024--65535,也最多能開啟64521個連接,而我現在只有一臺虛擬機作為客戶端,所以想要實現10萬連接是不可能了,但是通過這次測試,也讓我搞明白了,到底哪些參數會限制連接的上限,這就是我想要的。

最后,感謝Linux內核團隊的大神們推出了epoll這么牛逼的機制,才使得我們現在想實現高并發是如此的容易,希望自己有一天也能這么牛逼,哈哈。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

標簽:阜陽 開封 珠海 巴中 襄陽 西藏 湘潭 張家口

巨人網絡通訊聲明:本文標題《如何測試Linux下tcp最大連接數限制詳解》,本文關鍵詞  如何,測試,Linux,下,tcp,最大,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何測試Linux下tcp最大連接數限制詳解》相關的同類信息!
  • 本頁收集關于如何測試Linux下tcp最大連接數限制詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美性一二三区| 日韩欧美一级在线播放| 欧美亚洲一区三区| 亚洲免费在线观看视频| 成人app软件下载大全免费| 国产欧美一区二区精品秋霞影院| 高清日韩电视剧大全免费| 国产精品久久久久婷婷二区次| 94-欧美-setu| 免费在线看一区| 2023国产精华国产精品| 99这里都是精品| 视频一区欧美日韩| 久久久国产精华| 在线看国产一区| 韩国三级电影一区二区| 亚洲日本一区二区三区| 日韩欧美aaaaaa| 色哟哟精品一区| 老司机精品视频线观看86| 中文字幕第一区二区| 69堂精品视频| 成人av电影免费在线播放| 日韩电影免费在线看| 国产精品理论在线观看| 日韩欧美一区在线观看| 色呦呦国产精品| 成人高清视频免费观看| 蜜臂av日日欢夜夜爽一区| 亚洲精品国产无天堂网2021| 精品国产乱码久久久久久蜜臀| 欧美在线观看18| 成人h动漫精品一区二区| 麻豆91精品91久久久的内涵| 亚洲电影一区二区三区| 欧美国产成人在线| 欧美mv日韩mv国产网站app| 在线视频国内自拍亚洲视频| 成人午夜精品在线| 国产一区二区福利视频| 日韩电影一区二区三区四区| 亚洲一区二区精品3399| 亚洲欧洲另类国产综合| 国产色91在线| 久久精品一级爱片| 日韩欧美亚洲一区二区| 欧美裸体一区二区三区| 91国偷自产一区二区三区成为亚洲经典 | 亚洲精品成a人| **欧美大码日韩| 国产精品国产三级国产有无不卡 | 九九九久久久精品| 青青草国产成人99久久| 污片在线观看一区二区| 香蕉乱码成人久久天堂爱免费| 亚洲欧美激情视频在线观看一区二区三区 | 日韩女优av电影在线观看| 欧美剧在线免费观看网站| 91国偷自产一区二区使用方法| 色诱亚洲精品久久久久久| 在线观看一区日韩| 欧美区在线观看| 日韩一区二区精品葵司在线| 欧美本精品男人aⅴ天堂| 亚洲精品在线免费观看视频| 久久久欧美精品sm网站| 国产精品久久久久影院亚瑟| 亚洲人xxxx| 天堂影院一区二区| 韩国一区二区在线观看| 成人app下载| 欧美精品日韩一本| 久久众筹精品私拍模特| 中文成人综合网| 亚洲综合免费观看高清完整版| 亚洲一区二区三区中文字幕| 日韩—二三区免费观看av| 国产一区二区三区黄视频 | 亚洲国产精品激情在线观看| 18成人在线视频| 午夜国产精品影院在线观看| 韩国一区二区视频| 91搞黄在线观看| 日韩欧美成人一区二区| 亚洲视频免费在线观看| 男男gaygay亚洲| 99国产精品视频免费观看| 欧美影院一区二区三区| 精品国产乱子伦一区| 亚洲免费大片在线观看| 激情五月婷婷综合网| 色域天天综合网| 国产亚洲精品aa| 午夜欧美在线一二页| 大桥未久av一区二区三区中文| 欧美日韩免费观看一区三区| 日本一区二区三区在线不卡| 亚洲一区二区三区四区五区中文 | 免费视频最近日韩| 色成人在线视频| 久久综合中文字幕| 亚洲va欧美va国产va天堂影院| 高清国产一区二区| 日韩精品综合一本久道在线视频| 亚洲视频一二三区| 粉嫩av一区二区三区| 欧美一级精品在线| 亚洲午夜日本在线观看| 成人sese在线| 国产亚洲精品精华液| 看片的网站亚洲| 欧美久久久影院| 亚洲国产美女搞黄色| 色狠狠桃花综合| 亚洲男同1069视频| www.66久久| 国产精品你懂的在线欣赏| 国产一区二区三区在线看麻豆| 7777精品伊人久久久大香线蕉完整版 | 欧美成人vps| 午夜精品在线看| 在线视频国产一区| 亚洲精品国产精品乱码不99| av不卡在线播放| 国产精品第13页| 99re这里只有精品首页| 欧美国产日韩亚洲一区| 东方欧美亚洲色图在线| 国产婷婷一区二区| 精品一区二区三区免费| 亚洲精品一区二区在线观看| 精品一区二区三区在线播放视频| 欧美va在线播放| 国产精品538一区二区在线| 久久久久高清精品| 成人性生交大片免费| 中文字幕亚洲不卡| 在线亚洲精品福利网址导航| 亚洲h在线观看| 欧美一激情一区二区三区| 开心九九激情九九欧美日韩精美视频电影| 欧美一区二区免费视频| 经典三级视频一区| 国产亚洲午夜高清国产拍精品| 国产999精品久久| 亚洲日本成人在线观看| 色就色 综合激情| 美女一区二区久久| 欧美国产视频在线| 欧美无砖砖区免费| 久久se这里有精品| 国产精品美女久久久久高潮| 91久久一区二区| 蜜臀精品一区二区三区在线观看| 久久亚洲二区三区| 91网站最新地址| 人人精品人人爱| 欧美国产日韩在线观看| 欧美午夜精品久久久| 国产美女精品一区二区三区| 亚洲欧美国产高清| 精品欧美乱码久久久久久1区2区 | 7799精品视频| 成人性生交大合| 日韩电影一二三区| 综合在线观看色| 日韩一区二区在线免费观看| 成人av免费网站| 久久66热re国产| 亚洲综合色噜噜狠狠| 精品欧美乱码久久久久久1区2区| 色综合天天性综合| 九九热在线视频观看这里只有精品| 综合色天天鬼久久鬼色| 91精品国产一区二区| 91理论电影在线观看| 国产一区二区三区四区在线观看| 亚洲国产一区二区在线播放| 欧美国产精品劲爆| 久久这里只有精品首页| 日韩一区二区三区视频在线| 日本乱人伦一区| 99在线视频精品| 粉嫩aⅴ一区二区三区四区五区| 麻豆精品视频在线观看| 亚洲一区二区三区四区不卡| 日韩理论片网站| 欧美国产精品劲爆| xfplay精品久久| 日韩三区在线观看| 欧美在线你懂得| 91蜜桃传媒精品久久久一区二区| 国产精品亚洲人在线观看| 麻豆精品国产传媒mv男同| 日本一不卡视频| 日韩综合一区二区| 亚洲bdsm女犯bdsm网站| 亚洲最大色网站| 一区二区三区在线免费视频| 自拍偷拍欧美精品|