在Linux *** 作系统中怎么评估tcp连接数

在Linux *** 作系统中怎么评估tcp连接数,第1张

1首先,客户端和服务器建立的每个TCP连接都会占用服务器内存,所以最大TCP连接数和内存成正比。简单估算为最大内存除以单TCP连接占用的最小内存

2Linux *** 作系统中,一切都是文件。所以每个TCP连接,都会打开一个文件。为此Linux *** 作系统限制了每个用户能打开的文件数量,通过ulimit -n 查看。修改方式:

vi /etc/security/limitsconf文件,在文件中添加如下行(限制修改为10240):

speng soft nofile 10240

speng hard nofile 10240

3Linux *** 作系统中,TCP连接数量还受到端口数量限制,由于端口号只有1-65535,所以最大TCP连接数也只有65535个(包括系统端口1-1024)

4Linux *** 作系统对所有用户最大能打开文件的限制:cat /proc/sys/fs/file-max。

5网络核心模块对tcp连接的限制(最大不能超过65535):

vi /etc/sysctlconf

netipv4ip_local_port_range = 1024 65000

6防火墙对tcp连接的限制

综上,在Linux *** 作系统中,首先对TCP连接数量的限制依次有:端口数量限制,网络核心限制,最大文件数量限制(因为每建立一个连接就要打开一个文件),防火墙限制,用户打开文件限制

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\TcpTimedWaitDelay to 30and HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\tcpip\Parameters\MaxUserPort to 65534and rebooting the machineSee the readmedoc file for more information通过百度搜索介绍最多的还是让修改TimedWaitDelay 和MaxUserPort这2个值,其中是将TimedWaitDelay修改的相对小点,可以根据实际情况来定,同时将MaxUserPort这个值修改大些,但是修改完并重启机器后,该问题仍然存在,通过多方查资料,然后对一些注册表进行修改:[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] TcpNumConnections = 0x00fffffe (Default = 16,777,214) 以上注册表信息配置单机的最大允许的TCP连接数,默认为 16M。这个数值看似很大,这个并不是限制最大连接数的唯一条件,还有其他条件会限制到TCP 连接的最大连接数。 最大动态端口数 TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 个Socket 连接。我们可以修改如下注册表来调整这个动态端口的范围 [HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] MaxUserPort = 5000 (Default = 5000, Max = 65534) 最大TCB 数量 系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB),这个控制块用于缓存TCP连接的一些参数,每个TCB需要分配 05 KB的pagepool 和 05KB 的Non-pagepool,也就说,每个TCP连接会占用 1KB 的系统内存。 系统的最大TCB数量由如下注册表设置决定 [HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000) 非Server版本,MaxFreeTcbs 的默认值为1000 (64M 以上物理内存) Server 版本,这个的默认值为 2000。 也就是说,默认情况下,Server 版本最多同时可以建立并保持2000个TCP 连接。 最大TCB Hash table 数量 TCB 是通过Hash table 来管理的,下面注册表设置决定了这个Hash table 的大小 HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters] MaxHashTableSize = 512 (Default = 512, Range = 64-65536) 这个值指明分配 pagepool 内存的数量,也就是说,如果MaxFreeTcbs = 1000 , 则 pagepool 的内存数量为 500KB 那么 MaxHashTableSize 应大于 500 才行。这个数量越大,则Hash table 的冗余度就越高,每次分配和查找 TCP 连接用时就越少。这个值必须是2的幂,且最大为65536 MaxUserPort = 65534 (Decimal) MaxHashTableSize = 65536 (Decimal) MaxFreeTcbs = 16000 (Decimal) 这里我们可以看到 MaxHashTableSize 被配置为比MaxFreeTcbs 大4倍,这样可以大大增加TCP建立的速度。

在用jmeter做压测时,会遇到线程数超过5000时报错,这个错并不是程序的错,而是请求被我们本地的服务器给拒绝了。这时候就需要我们修改本地服务器的注册表了。

注:我这里新建的是“二进制值(B)”类型的,上面的值是10进制数据,应该转换为二进制数据再输入
(这里只能输入偶数位数,由于65536转换为二进制后是奇数位数,所以这里65536的值用65535的值替换的)

参考文章: >应用地方不同。
TCP、UDP协议对应于传输层,IP协议对应于网络层,而>默认没有限制。“incompleteoutbound TCP/IP connection attempts per second”,对于TCP由于要实现三次握手,所以会对半连接进行限制。对于windowsxp是10次,vista根据版本不同是2~25次。但是如果连接数过多,机器数量多大,就会造成路由器负载过大,造成网络设备瘫痪,所以很多网络设备有连接总数的限制。但这个限制通过修改,可以去除。
实际使用中,每个连接要耗CPU和内存的,否则多了会造成系统瘫痪。而不同的系统,不同的服务器,可以支持的数量当然不同了,所以这个问题没有实际意义,也没有准确答案。

网络上盛传的那个改连接数,我认为基本上没用,关键是你要了解他的原理,
它的作用是改变单位时间内的并发连接数,也就是说你写个程序,想要在1秒内连接超过50(假设)此连接,是不被允许的,你只能达到10个,我认为一般应用足够了,比如下载应用,1秒不够,稍后软件都会重试,并不会影响你的下载速度,像windows 2003这样的 *** 作系统,是不会做此限制的,作为服务器,它的目标就是提高网络吞吐量。
这样解释能明白否?

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快好好读下,你会明白的。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/12852057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)