河南快赢481客户端下载

品略圖書館

網絡編程釋疑之:單臺服務器上的并發TCP連接數可以有多少

曾幾何時我們還在尋求網絡編程中C10K問題的解決方案,但是現在從硬件和操作系統支持來看單臺服務器支持上萬并發連接已經沒有多少挑戰性了。

我們先假設單臺服務器最多只能支持萬級并發連接,其實對絕大多數應用來說已經遠遠足夠了,但是對于一些擁有很大用戶基數的互聯網公司,往往面臨的并發連接數是百萬,千萬,甚至騰訊的上億(注:QQ默認用的UDP協議)。雖然現在的集群,分布式技術可以為我們將并發負載分擔在多臺服務器上,那我們只需要擴展出數十臺電腦就可以解決問題,但是我們更希望能更大的挖掘單臺服務器的資源,先努力垂直擴展,再進行水平擴展,這樣可以有效的節省服務器相關的開支(硬件資源,機房,運維,電力其實也是一筆不小的開支)。

那么到底一臺服務器能夠支持多少TCP并發連接呢?

常識一:文件句柄限制

在linux下編寫網絡服務器程序的朋友肯定都知道每一個tcp連接都要占一個文件描述符,一旦這個文件描述符使用完了,新的連接到來返回給我們的錯誤是“Socket/File:Can't open so many files”。

這時你需要明白操作系統對可以打開的最大文件數的限制。

進程限制

執行 ulimit -n 輸出 1024,說明對于一個進程而言最多只能打開1024個文件,所以你要采用此默認配置最多也就可以并發上千個TCP連接。

臨時修改:ulimit -n 1000000,但是這種臨時修改只對當前登錄用戶目前的使用環境有效,系統重啟或用戶退出后就會失效。

重啟后失效的修改(不過我在CentOS 6.5下測試,重啟后未發現失效):編輯 /etc/security/limits.conf 文件, 修改后內容為

* soft nofile 1000000

* hard nofile 1000000

永久修改:編輯/etc/rc.local,在其后添加如下內容

ulimit -SHn 1000000

全局限制

執行 cat /proc/sys/fs/file-nr 輸出 9344 0 592026,分別為:1.已經分配的文件句柄數,2.已經分配但沒有使用的文件句柄數,3.最大文件句柄數。但在kernel 2.6版本中第二項的值總為0,這并不是一個錯誤,它實際上意味著已經分配的文件描述符無一浪費的都已經被使用了 。

我們可以把這個數值改大些,用 root 權限修改 /etc/sysctl.conf 文件:

fs.file-max = 1000000

net.ipv4.ip_conntrack_max = 1000000

net.ipv4.netfilter.ip_conntrack_max = 1000000

常識二:端口號范圍限制?

操作系統上端口號1024以下是系統保留的,從1024-65535是用戶使用的。由于每個TCP連接都要占一個端口號,所以我們最多可以有60000多個并發連接。我想有這種錯誤思路朋友不在少數吧?(其中我過去就一直這么認為)

我們來分析一下吧

如何標識一個TCP連接:系統用一個4四元組來唯一標識一個TCP連接:{local ip, local port,remote ip,remote port}。好吧,我們拿出《UNIX網絡編程:卷一》第四章中對accept的講解來看看概念性的東西,第二個參數cliaddr代表了客戶端的ip地址和端口號。而我們作為服務端實際只使用了bind時這一個端口,說明端口號65535并不是并發量的限制。

server最大tcp連接數:server通常固定在某個本地端口上監聽,等待client的連接請求。不考慮地址重用(unix的SO_REUSEADDR選項)的情況下,即使server端有多個ip,本地監聽端口也是獨占的,因此server端tcp連接4元組中只有remote ip(也就是client ip)和remote port(客戶端port)是可變的,因此最大tcp連接為客戶端ip數×客戶端port數,對IPV4,不考慮ip地址分類等因素,最大tcp連接數約為2的32次方(ip數)×2的16次方(port數),也就是server端單機最大tcp連接數約為2的48次方。

總結

上面給出的結論都是理論上的單機TCP并發連接數,實際上單機并發連接數肯定要受硬件資源(內存)、網絡資源(帶寬)的限制,至少對我們的需求現在可以做到數十萬級的并發了,你的呢?

免責聲明:本文僅代表文章作者的個人觀點,與本站無關。其原創性、真實性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容文字的真實性、完整性和原創性本站不作任何保證或承諾,請讀者僅作參考,并自行核實相關內容。

http://www.lnegs.com.cn/style/images/nopic.gif
我要收藏
個贊
被踩
分享到
相關推薦
精選文章
分享
評論
首頁
河南快赢481客户端下载 奔驰宝马机吐分规律 黑龙江时时的玩法 大小骰宝 注册就送彩金真实网站 pk10官网开奖结果直播 481彩票网下载安装 乐刷怎样赚钱是真的吗 3d技巧准确率100直选 草花机打一门规律 西洋棋怎么玩 时时彩平投1:1盈利技巧 pk拾计划软件手机版免费 ag金拉霸稳赢技巧 分分彩组六杀号最稳玩法 炒股软件如何查看日线,月线,年线等 彩神是真的吗