一台服务器能支撑多少个TCP连接

1.概述

一台Linux服务器能支持多少个TCP连接,socket也是文件,受文件描述符数量的限制。可以修改,但是要有足够多内存,一个Tcp连接共得消耗3.3KB左右,同时接收缓存区至少要4K大小的空间。所以根据服务器的资源情况,才能具体讨论一台服务器能支撑多少个TCP连接。下面详细介绍文件描述符和接收缓冲区大小配置。

2.文件描述符

        "进程每打开一个文件(linux下一切皆文件,包括socket),都会消耗一定的内存资源。如果有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。所以linux系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。这三个限制的含义和修改方式如下:"

  1. 系统级:当前系统可打开的最大数量,通过fs.file-max参数可修改
  2. 用户级:指定用户可打开的最大数量,修改/etc/security/limits.conf
  3. 进程级:单个进程可打开的最大数量,通过fs.nr_open参数可修改

3.接收缓冲区

        接收缓存区大小是可以配置的,通过sysctl命令就可以查看。

         "其中在tcp_rmem"中的第一个值是为你们的TCP连接所需分配的最少字节数。该值默认是4K,最大的话8MB之多。也就是说你们有数据发送的时候我需要至少为对应的socket再分配4K内存,甚至可能更大。"

4.服务端百万连接达成记


         Linux对最大文件对象数量有限制,所以要想完成这个实验,得在用户级、系统级、进程级等位置把这个上限加大。我们实验目的是100W,这里都设置成110W,这个很重要!因为得保证做实验的时候其它基础命令例如ps,vi等是可用的。

 

 活动连接数量确实达到了100W:

​ 

 当前机器内存总共是3.9GB,其中内核Slab占用了3.2GB之多。MemFree和Buffers加起来也只剩下100多MB了:

 通过slabtop命令可以查看到densty、flip、sock_inode_cache、TCP四个内核对象都分别有100W个:

​ 

 

 文章参考:

一台服务器能支撑多少个TCP连接 - 小家电维修 - 博客园


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部