在性能测试过程中,经常会接触到链接数相关的问题,有一个问题曾经困扰我好长时间,那就是一台服务器最多能支持多少链接数呢?

有的朋友可能会说是65535,因为操作系统有65535个端口,那么这个答案准确吗?

首先先了解下如何标识一个链接(记住下面的概念,文章后面要用到),操作系统是通过一个四元组来标识一个TCP链接:

{本地ip,本地port,远程ip,远程port}

这四个要素唯一确定一个TCP链接,任意一个要素不相同,就认为是一个不同的链接。

在Linux系统中,一切皆文件,每一个TCP链接都要占用一个文件句柄,系统允许创建的链接数取决于句柄数的上限。超过这个值再创建链接就会报这样的错误:

“Can't open so many files"

通过命令ulimit -n可以查看当前系统允许打开文件数量的上限,在Linux中这个值默认是1024,也就是说默认情况下,只能创建1024个链接。同时这个值也是可以修改的,通过修改/etc/security/limits.conf文件,可以把这个值改大,一般服务器都会改的很大,比如我们的服务器上一般设置为1000000。

那这么说是不是就意味着只要我改的很大,链接数可以无限大了?

其实也并不是这样,创建链接的时候,一般分为两个端,即链接的发起端和链接接收端。比如我们现在使用Jmeter进行压测,被测系统部署在Tomcat服务器10.0.0.3上,使用的是8080端口。如果我们用5个并发来进行压测的话,创建的链接如下图所示

链接发起端

对于Jmeter来说,它是链接发起端,Jmeter创建了5个链接去连接服务端的8080端口,每个新建链接会占用了一个端口号,如图中的10001-10005。在操作系统中,端口号的范围是0-65535,其中0-1024是预留端口号,不可使用,其他的端口都是可以使用的。也就是说,在链接发起端,受端口号的限制理论上最多可以创建64000左右链接。

那么有没有办法超过这个限制呢,答案是肯定的!

通过TCP标识的四元组可以看到,对于链接发起端,影响链接数的是本地ip和port,端口号受限于65535,已经没办法增加了。那我们可以增加本地ip来达到这个目的。一般情况下,服务器的一个网卡上只绑定了一个ip,对外通信都使用这个ip进行。其实网卡是支持一个绑定多个IP的(必须确保ip是有效的且未使用的)

ifconfig eth0:1 10.0.0.5

以上命令可以在eth0网卡上增加一个ip 10.0.0.5,服务器网卡每增加一个ip,就可以允许在这个ip上再创建65535左右的链接数。

我曾经做过一个邮件网关的链接数测试,目的是为了测试网关服务器可以接收并且保持多少TCP长连接。正常情况下,受限于单台机器65535端口号的影响,客户端想创建25万TCP长连接,至少需要4台机器。通过对客户端网卡绑定多IP的方法,成功在一台机器上创建了25万个链接。

当然,这种手段只是一种非常规的操作,只是为了进行某种特殊场景的测试。正常情况下不推荐网卡绑定多个IP。

链接接收端

对于Tomcat服务器来讲,它是链接接收端,它是不是也受限于65535呢?并不是,从上面图中可以看到,Jmeter发起的所有链接都创建在Tomcat服务器的8080端口,也就是说对于链接接收端,所有的链接占用的是同一个端口。根据TCP标识四元组可以分析出,一个链接接收端,最大的TCP链接数=所有有效ip排列组合的数量*端口数量64000,这个计算结果应该是一个天文数字(我数学不好就不计算了,差不多相当于我一年的工资总和)。因此链接接收端支持的链接数理论上可以认为是无限大的。

上面介绍的一些数据都是理论上单台机器可以支持的TCP链接数,实际情况下,每创建一个链接需要消耗一定的内存,大概是4-10kb,所以链接数也受限于机器的总内存。(链接发起端,活力全开才64000左右链接,内存最多才占用640M,一般客户端都能 满足;内存限制主要还是考虑服务器端)

单台服务器最大支持多少连接数相关推荐

  1. 【 Linux 】单台服务器上并发TCP连接数(转)

    单台服务器上并发TCP连接数      问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:     对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完 ...

  2. 网络编程释疑之:单台服务器上的并发TCP连接数可以有多少

    曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了. 我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用 ...

  3. 面试官给我挖坑:单台服务器并发TCP连接数到底可以有多少 ?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"k8s"领取阿里云<深入浅出k8s.pdf> 欢迎跳转到本文的原文链接:h ...

  4. 高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少

    前言 曾几何时我们还在寻求网络编程中C10K问题(有关C10K问题请见文章<The C10K problem(英文在线阅读.英文PDF版下载.中文译文)>)的解决方案,但是现在从硬件和操作 ...

  5. 到底一台服务器能够支持多少TCP并发连接?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 朱小厮 来源 | 公众号「朱小厮的博客」 曾几 ...

  6. 超融合架构提升单台服务器性能,浅谈超融合架构

    超融合架构是什么? 超融合架构是基于标准通用的硬件平台,通过软件定义实现计算.存储.网络融合,实现以虚拟化为中心的软件定义数据中心的技术架构.其主要特征是: (1)软件定义 独立于硬件,采用商业通用标 ...

  7. 如何扩容单台服务器的存储容量?

    作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能.自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验 ...

  8. SCOM 2012系列⑨单台服务器拓扑监控

    为了更直观的展示出我们的服务器健康状况与各应用程序的运行状况,我们看图说话总是最直观有效的,所以我们就把服务器的各组件情况分成拓扑图似的模样给我们直观展示出来吧: 1 单台服务器拓扑图监控 首先打开& ...

  9. 渗透测试流程(单台服务器)

    渗透测试流程(单台服务器) 转载于:https://www.cnblogs.com/sky--/p/5781432.html

  10. 进阶!基于CentOS7系统使用cobbler实现单台服务器批量自动化安装不同版本系统(week3_day5_part2)-技术流ken...

    前言 在上一篇博文<cobbler批量安装系统使用详解-技术流ken>中已经详细讲解了cobbler的使用以及安装,本篇博文将会使用单台cobbler实现自动化批量安装不同版本的操作系统. ...

最新文章

  1. 利用json模块解析dict报错找不到attribute 'dumps'[python2.7]
  2. Java静态变量与静态方法与成员变量成员方法的区别
  3. Android 开源框架Universal-Image-Loader学习
  4. 对pca降维后的手写体数字图片数据分类_知识干货-机器学习-TSNE数据降维
  5. python发红包实现
  6. java1.8输出语句_[【小白学Java——干货】1.初学Java,认识语法、变量与输出语句...
  7. Remoting服务集成到IIS的简单总结
  8. [转]VS清除打开项目时的TFS版本控制提示
  9. flink源码分析_Flink源码分析之深度解读流式数据写入hive
  10. rocketmq顺序消费问题
  11. 利用quietHDD解决硬盘C1增长以及异响问题
  12. 《Spring实战》读书笔记-第1章 Spring之旅
  13. 部署免安装版MySQL
  14. Java中强、软、弱、虚引用
  15. python工资条教程_我用python帮朋友写了一个“制作工资条”的自动化程序!网友说:真棒!...
  16. 【Python】利用滑动窗口计算全基因组每个窗口上CNV的拷贝数和Vst
  17. 物联网智能开关平台源码
  18. c语言一维数组n个元素求和,C++编程一维数组元素求和?
  19. 一个 R 包带你挖掘宏基因组公共数据库
  20. 再见 xxl-job!更强大的新一代分布式任务调度框架来了!

热门文章

  1. 7-1 简化的插入排序 (15 分)
  2. linux 下配置jdk
  3. 搭建和测试 Redis 主备和集群
  4. OwnCloud 搭建
  5. UVALive 2659+HUST 1017+ZOJ 3209+FZU 1686 (DLX
  6. Java Access Specifier (不同的访问修饰符)
  7. DIY协同办公平台(C/S)系列3之内部邮箱篇
  8. 如何获取系统Home(Launcher)应用判断用户是否处于home界面
  9. 读书笔记 之《Thinking in Java》(对象、集合、异常)
  10. 一位华为底层老员工的中年危机,发人深思!