`

Linux单机TCP并发连接

 
阅读更多
http://blog.csdn.net/kobejayandy/article/details/47127991



总结下服务端对于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的值。
[ruby] view plain copy
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下需要修改的地方有:
[python] view plain copy
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业务的处理还是很困难的。
分享到:
评论

相关推荐

    linux下TCP聊天程序(多线程)

    这种模式更适用于处理大量并发连接的情况,但需要程序员处理更多的细节,例如通过循环来检查数据是否可用。 #### 4. 系统实现 ##### 4.1 TCP通信实现 本项目采用了TCP协议来实现聊天功能。下面详细介绍TCP通信的...

    易语言-hp-socket Agent模型,单机6w+并发连接数 tcp 压测

    通过对以上技术点的整合与优化,hp-socket Agent模型能够在单机上实现对6万多个并发TCP连接的有效管理和高效处理,这对于构建大型分布式系统、互联网服务或者大数据处理平台等有着重要的实践价值。 在实际应用中,...

    linux下的简单聊天室源代码(c语言实现)

    这个聊天室很可能是基于TCP协议实现的,因为TCP提供了面向连接、可靠的通信服务。TCP通过三次握手建立连接,并且保证数据的有序无损传输。 3. **服务器端编程**: 服务器端通常需要监听特定的端口以等待客户端的...

    linux系统下实现聊天室

    TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它保证了数据包在互联网上的顺序传输和无丢失。在聊天室的场景中,TCP协议能确保消息的完整性和正确性,避免因为网络问题导致的消息丢失或...

    linux c 聊天程序

    在TCP/IP协议族中,我们通常使用TCP套接字来保证数据的可靠传输。 2. **多线程处理**:为了支持多个用户同时在线聊天,程序需要使用多线程技术。每个连接的用户对应一个独立的线程,这样可以确保每个用户的交互不会...

    基于Linux网络聊天室

    - **TCP通信**:传输控制协议(TCP)提供了一种面向连接的服务,数据传输前需要先建立连接,保证了数据的可靠传输。 ##### 2. 客户/服务器模型 - **基本原理**:在客户/服务器模型中,客户端向服务器发起请求,...

    嵌入式linux论文设计报告.docx

    服务端程序通过共享存储聊天数据,并发送给每个连接的客户端。客户端程序通过 Socket 编程技术连接到服务器端,接收服务器端发送的数据。通过多路复用的子进程实现服务端与多个客户端之间的数据发送与接收。 四、...

    基于Linux网络聊天室的设计.doc

    - TCP/IP协议:用于保证数据的可靠传输,建立客户端与服务器之间的连接。 - select/poll/epoll:用于多路复用,监控多个套接字的读写事件,提高服务器性能。 - 编程语言:通常使用C或C++,因为它们对系统级操作支持...

    毕业设计论文范文源码-mariotcp:高性能tcp服务器

    MarioTCP:一个可单机支持千万并发连接的TCP服务器 请注意: 过去几年有不少朋友加我,心想对不住大家了,建个群聚聚大家伙,请大家群里畅所欲言…请加QQ群:564994650, 里面有不少linux c的研发同学:) MrioTCP,...

    Linux集群的研究及应用

    LVS(Linux Virtual Server)通过IP负载均衡和TCP会话保持等技术,实现了透明的服务器群集。HA集群则利用Heartbeat等心跳检测机制,监控集群内各节点的状态,一旦发现异常,立即启动故障转移。 3. LVS与HA集群的...

    基于python的socket实现单机五子棋到双人对战

    - **TCP/IP**:Socket通常基于TCP/IP协议族,这是一种可靠的、面向连接的传输协议。 - **服务器端与客户端**:在Socket通信中,通常有一个服务器端(Server)和一个或多个客户端(Client)。服务器端监听特定的端口...

    Linux高级程序设计 第三版 源码(示例代码)(杨宗德)

    Linux提供了丰富的API用于网络通信,如套接字(socket)编程,包括TCP/IP协议栈的使用,客户端/服务器模型,以及套接字选项和网络数据包的处理。 7. **ch14**: 可能讲解进程间通信的其他机制,如命名管道、UNIX域套...

    网吧公告网络单机双版合一

    "网吧公告网络单机双版合一"这个标题表明这是一个针对网吧环境设计的公告系统,它集成了网络版和单机版的功能,意味着该软件既能在线上网络环境中运行,也能在没有网络连接的单机模式下正常工作。这种设计考虑到了...

    C++教程网

    实训主题:Linux网络编程之TCP/IP基础篇、Linux网络编程之socket编程篇、Linux网络编程之进程间通讯篇、Linux网络编程之线程篇。 实战项目:Miniftpd。 阶段五:跟我一起学C++ 课程目标:掌握C++语法,掌握理解面向...

    红旗下的APACHE配置教程

    性能配置是Apache优化的重要环节,这可能涉及到调整连接限制、进程参数,以应对高并发访问。例如,`MaxKeepAliveRequests`设置每个连接允许的最大请求数,`MaxClients`设定同时处理的最大客户端连接数。 监控Apache...

    Embedded-Linux-Development:学习记录

    这是所有开发工作的起点,包括安装交叉编译工具链、设置开发环境变量、配置Linux内核以及建立目标板的连接等。了解如何正确搭建和管理开发环境,能够为后续的代码编写和调试工作提供便利。 接下来,是“文件I/O编程...

    K8SR6 高可用高可用最佳部署实践

    - TCP连接数:调整TCP连接数,以支持更多的并发连接。 - 内存管理:通过调整swap策略等来优化内存使用效率。 3. **安全设置**:确保操作系统安装最新的安全补丁,并启用防火墙规则来保护数据库的安全。 通过上述...

    计算机网络专业课程设计基于ICMPTCP的网段端口扫描C语言编写.doc

    设计要求包括在Windows或Linux环境下运行的单机程序,具备用户友好的界面。程序需要能够扫描单个主机的端口,并展示哪些端口处于开放状态;同时,也能对一个网段内的IP地址进行扫描,揭示哪些主机正在运行。此外,源...

Global site tag (gtag.js) - Google Analytics