zoukankan      html  css  js  c++  java
  • 对Linux下socket限制的理解

    最近在网络上看到一个关于Linux下socket数量限制相关的讨论,主要讨论在linux下,是否能支持10甚至百万个tcp并发连接。

    讨论 1:在32为系统下,最大连接数的极限值是多少?

    从系统内存的角度考虑,32位系统最大支持4G内存,内核空间为1G。如果每个socket占用的内存为C,那么最大连接数为:

     maxconn = 1GB/C

    如何分析每个socket占用的内核空间内存呢?分析socket占用内存的组成部分:文件系统inode + socket结构 + tcp windows。

    tcp windows的内存实际上就是挂在sk结构下的skb队列,skb是真正存储数据的地方,也就是消耗内存的地方。如果CPU的响应速度足够快,网络响应也很快,

    那么skb队列只需要保留1个就可以,假定为1.5K。

    文件系统inode + socket结构 是固定大小的,大约为1K。

    理想情况下:每个socket占用的内存为2~3K。以2K计算,内核空间实际可用内存约在800M,那么800M/2K = 400K.

    粗略估计,Linux下,32位系统,能支持40万tcp并发连接差不多就到极限了。

    分析过程是否有问题,还望高手指教。

    HAProxy是通过socket的方式实现的,一直没有找到关于最大并发连接的测试结果,在32位Linux上,最大值估计在20万并发连接左右。

  • 相关阅读:
    中间代码生成器-5-编译原理
    un-动物:老鼠
    un-动物:狗
    un-动物:猫
    un-动物:鹅
    un-动物:鸭子
    un-动物:鸡
    un-常见动物-动物:马
    un-常见动物-动物:骡
    un-常见动物-动物:牛
  • 原文地址:https://www.cnblogs.com/yizhinantian/p/2004340.html
Copyright © 2011-2022 走看看