单台服务器上并发TCP连接数
    
问题:一台服务器到底能够支持多少TCP并发连接呢?

1. 文件描述符限制:
    对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的连接到来返回给我们的错误是"Socket/File:Can't open so many files"

这时,你需要明白操作系统可以打开最大文件数的限制。

进程限制(用户限制):
            执行 ulimit -n 输出1024,说明对于一个进程而言最多只能打开1024个文件,所以你要采用此默认配置最多也就可以并发上千个TCP连接。

临时修改:ulimit -n 1000000,但是这种临时修改只对当前登录的用户目前使用的环境有效,系统重启或用户退出会就失效。

永久生效:修改/etc/security/limits.conf 文件:

                *    soft    nofile
* hard nofile
ulimit -SHn >> /etc/rc.local

全局限制:
            执行 cat /proc/sys/fs/file-nr  
                1216    0    187612
                (1) 1216:已经分配的文件描述符数
                (2) 0:已经分配但没有使用的文件描述符数,这里的意思是内核分配了1216,然后1216个都用光了,所以“分配了但没有使用的 句柄数目” 为 0
                (3) 187612:最大文件句柄数
                注意:在kernel2.6 版本中第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件描述符无一浪费的都已经
                被使用。

可以通过在/etc/sysctl.conf里定义fs.file-max = 1000000 来调整最后一个值的大小

2. 端口号范围限制:
    操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的,由于没有tcp连接都要占用一个端口号,所以我们最多可以使用
    60000多个并发连接,这是对客户端的理解。
    分析一下:
        (1) 如何标识一个TCP连接? 系统用一个4元组来标识一个TCP连接:(local ip,local port,remote ip, remote port) 对于accept来说,accept的sock不占新的端口 第一个local ip , local port 代表客户端的ip地址和端口号。
        而我们作为服务器实际只是使用了bind这一个端口
        说明端口65535并不是并发量的限制。
        (2) server最大tcp连接数:server通常固定在某一个本地端口上监听,等待client的连接请求。不考虑地址重用的情况下,即使多个ip
        本地监听端口也是独占的。因此server端tcp连接4元组中只有remote ip 和 remote port 是可变的,因此最大tcp连接为
        客户端ip数 * 客户端port数。 对于ipv4,不考虑ip地址等因素,最大tcp连接约为2的32次方(ip数) * 2的16次方(port数)
        也就是  server端:单机最大tcp连接数约为:2的48次方。

问题1:查看文件描述符使用 lsof查看到的句柄数和/proc/sys/fs/file-nr 值不一样,为什么?

        [root@localhost ~]# lsof | wc -l

        [root@localhost ~]# !cat
cat /proc/sys/fs/file-nr

答案:一个文件可以被多个进程打开,lsof所列出来的是每个进程所打开的文件,所以lsof的数值比file-nr要大很正常。

问题2:关于文件句柄到底设置多大合适?

查看句柄数的方法:

        [root@node1 ~]# cat /proc/sys/fs/file-nr

        [root@node1 ~]# cat /proc/sys/fs/file-max

        默认最大句柄数为97321

这个值在kernel的文档里意思是file-max一般为内存大小(KB)的10%来计算,如果使用shell,可以这样计算:
        grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'  计算出来的值一般和默认最大句柄数近似。

        echo "fs.file-max = 100133" >> /etc/sysctl.conf && sysctl -p

【 Linux 】单台服务器上并发TCP连接数的更多相关文章

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

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

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

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

  3. socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少

    常识一:文件句柄限制 在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File ...

  4. Linux两台服务器上互传文件

    主服务器:192.168.100.30: 文件所在服务器:192.168.100.31: 1. 在主服务上拷贝文件: #scp root@192.168.100.31:/home/a.txt /hom ...

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

    高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少     阅读(81374) | 评论(9)收藏16 淘帖1 赞3   JackJiang Lv.9    1 年前 | 前言 曾几何时我 ...

  6. 单台服务器最大tcp连接

    如果对服务器进行压力测试,常常出现这种情况 tcp连接数过多 netstat   -an    windows查看tcp连接数 那么怎么增加单台服务器的最大连接数呢?       最简单的办法,增加内 ...

  7. Linux课程---16、apache虚拟主机设置(如何在一台服务器上配置三个域名)

    Linux课程---16.apache虚拟主机设置(如何在一台服务器上配置三个域名) 一.总结 一句话总结:有三个网站www.lampym.com,bbs.lampym.com,mysql.lampy ...

  8. 不要将缓存服务器与Tomcat放在单台机器上,否则出现竞争内存问题

    缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况. 1.不要将缓存服务器与Tomcat放在单台机器上,否则出现竞争内存问题 2.不要将缓存服务器 ...

  9. [转]linux将一个服务器上的文件或者文件夹复制到另一台服务器上

    本文转载自<linux 将一个服务器上的文件或者文件夹复制到另一台服务器上>,有时间实践一把 使用scp将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上 复制文件或文件夹 ...

随机推荐

  1. hduoj---Tempter of the Bone

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  2. nyoj------------找球号(一)

    找球号(一) 时间限制:3000 ms  |           内存限制:65535 KB 难度:3   描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0&l ...

  3. firefox 前端开发插件

    http://blog.csdn.net/xjinza/article/details/6856249

  4. 总结PLSQL的快捷键以及使用技巧

    http://www.dedecms.com/knowledge/data-base/oracle/2012/0724/3643.html 最近在开发过程中,遇到一些麻烦,就是开发效率问题,有时候其他 ...

  5. 【jQuery】form表单元素序列化为json对象

    序列化form表单元素为json对象: <!Doctype html> <html xmlns=http://www.w3.org/1999/xhtml> <head&g ...

  6. RHEL7 -- 识别文件系统和设备

    逻辑卷依赖于设备映射程序(DM)内核驱动程序. 比如有个逻辑卷组rhel中有一个逻辑卷root,对应的设备为/dev/rhel/root.符号链接/dev/rhel/root指向/dev/dm-< ...

  7. sqlserver中将varchar类型转换为int型再进行排序的方法

    sql中把varchar类型转换为int型然后进行排序,如果我们数据库的ID设置为varchar型的 在查询的时候order by id的话 如果我们数据库的ID设置为varchar型的 在查询的时候 ...

  8. gradle平级项目引用

    一.准备1. 新建一个gradle项目cc-core2. 新建一个gradle项目cc-util 二.场景项目cc-core引用项目cc-util 三.配置1. 项目cc-util被引用的项目什么都不 ...

  9. java中代理,静态代理,动态代理以及spring aop代理方式,实现原理统一汇总

    若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的. 通常情况下, 静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类. ...

  10. Java:多线程,分别用Thread、Runnable、Callable实现线程

    并发性(concurrency)和并行性(parallel)是两个概念,并行是指在同一时刻,有多条指令在多个处理器上同时执行:并发指在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得宏观 ...