单机tcp并发连接

原创 2015年07月09日 14:51:43

单机tcp并发连接

突然想起面试时候面试官对我说的“我们服务器已经可以做到单机百万连接了”。当时也不是很明白有什么了不起的,三年了还记得他说过这句话。总结下服务端对于tcp连接的限制与提高tcp连接数的方法,可能工作中永远不会用到,但对于网络知识理解会有帮助。

1.首先服务端与16位的端口号(最大65535)没什么关系
服务端ip+port(监听端口) + 客户端ip+port 决定了一条连接,客户端连接服务器后,服务端并没有又分配一个物理端口与客户端连接。其实所有的数据还是通过监听端口接收与发送的(不论全双工与半双工,反正都是双工的),只不过多了一个逻辑上的socket。这些都应该是网卡上的事情,当接收到一个字节流的时候,网卡就会回调给操作系统,回调的时候会告诉操作系统客户端ip+port,假如是epoll模型,那么这次可能只接收了几个字节,回调那个新的socket的特定方法。然后下一次从监听端口回调上来的数据可能是另外的一个逻辑上的socket,各自互不影响。

2.内存限制
系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB)。一个tcb控制块大概要占用1k多的内存,假如百万连接,1个tcb占用1k内存,那么就需要1G的内存了,这还是理想情况,一般情况下tcb要大于1k内存。当每个连接上在有数据传输的时候,同时需要的内存就更大了。

另外需要设置的tcp参数有tcp的读写缓冲区,默认为86k,都可以改成4k。此外需要修改tcp_mem的值。

tcp_mem(3个INTEGER变量):low, pressure, high
low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
high:允许所有tcp sockets用于排队缓冲数据报的页面量,当内存占用超过此值,系统拒绝分配socket,后台日志输出“TCP:
too many of orphaned sockets”。

3.文件句柄限制
每个socket都是一个文件句柄,linux下文件句柄限制,包括linux允许的最大文件句柄,linux允许的最大同时活动的文件句柄。

4.网卡限制
千兆网卡,上限满负荷工作,大概有600兆左右,单位为b,除以8为75k/单个连接。这个一般可以满足。

参考http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html linux下需要修改的地方有:

echo "* - nofile 1048576" >> /etc/security/limits.conf   #open file resource limit 是linux中process可以打开的文件句柄数量。
echo "fs.file-max = 1048576" >> /etc/sysctl.conf    #系统最大允许的文件描述符 
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf   #可以使用的端口范围,主要为了测试时候使用   
echo "net.ipv4.tcp_mem = 786432 2097152 3145728" >> /etc/sysctl.conf   #见上
echo "net.ipv4.tcp_rmem = 4096 4096 16777216" >> /etc/sysctl.conf     
echo "net.ipv4.tcp_wmem = 4096 4096 16777216" >> /etc/sysctl.conf

在参考文章中,建立100w的连接,大概使用了7500M的内存,每个连接大概7.5k的内存(主要是读写缓冲区,tcb的大小)。

另外,通过修改系统配置达到100w连接并不难,但是要是真正实现并发100w业务的处理还是很困难的。

参考:

100万并发连接服务器笔记之准备篇
http://www.blogjava.net/yongboy/archive/2013/04/09/397559.html
100万并发连接服务器笔记之测试端就绪
http://www.blogjava.net/yongboy/archive/2013/04/10/397631.html
100万并发连接服务器笔记之1M并发连接目标达成
http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html

相关文章推荐

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

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

mTCP 和 DPDK 构造百万千万并发TCP连接

mTCP是一个userspace TCP协议栈. 适用于多核CPU,高可扩展性. 结合 userspace I/O packet engine 如 DPDK, netmap, psio. 可并发百万千...

t-io: 百万级TCP长连接即时通讯框架

t-io: 百万级TCP长连接即时通讯框架,让天下没有难开发的即时通讯 t-io: 百万级TCP长连接即时通讯框架,让天下没有难开发的即时通讯 t-io是基于jdk aio实现的易学易用、稳定、...

Linux单机最大tcp连接数(★firecat推荐★)

文章来源:http://www.cnblogs.com/mydomain/archive/2013/05/27/3100835.html 单机最大tcp连接数 网络编程 在tcp应用中,ser...

Windows 下单机最大TCP连接数

在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数。 Windows 下单机的TCP连接数有多个参数共同决定,下面...

Windows 下单机的TCP连接数

在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数。 Windows 下单机的TCP连接数有多个参数共同决定,...
  • lxlmj
  • lxlmj
  • 2011年11月21日 14:39
  • 756

单机最大tcp连接数

单机最大tcp连接数 网络编程 在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少? 如何标识...

Windows 下单机最大TCP连接数

在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数。 Windows 下单机的TCP连接数有多个参数共同决定,...
  • nawei87
  • nawei87
  • 2013年08月23日 19:34
  • 384

Windows单机最大TCP连接数

在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数。 Windows 下单机的TCP连接数有多个参数共同决定,...

Windows 下单机最大TCP连接数

在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数。 Windows 下单机的TCP连接数有多个参数共同决定,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单机tcp并发连接
举报原因:
原因补充:

(最多只允许输入30个字)