Windows 下单机的TCP连接数有多个参数共同决定
最大TCP连接数
[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需要分配 0.5 KB的pagepool 和 0.5KB 的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.
Linux tcp 连接数修改
1、修改用户进程可打开文件数限制
在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:
[speng@as4 ~]$ ulimit -n
1024
这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件数就只有大概1024-10=1014个左右。也就是说缺省情况下,基于Linux的通讯程序最多允许同时1014个TCP并发连接。
对于想支持更高数量的TCP并发连接的通讯处理程序,就必须修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hardlimit)。其中软限制是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制则是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制。
修改上述限制的最简单的办法就是使用ulimit命令:
[speng@as4 ~]$ ulimit -n <file_num>
上述命令中,在<file_num>中指定要设置的单一进程允许打开的最大文件数。如果系统回显类似于“Operation notpermitted”之类的话,说明上述限制修改失败,实际上是因为在<file_num>中指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制。因此,就需要修改Linux系统对用户的关于打开文件数的软限制和硬限制。
第一步,修改/etc/security/limits.conf文件,在文件中添加如下行:
speng soft nofile 10240
speng hard nofile 10240
其中speng指定了要修改哪个用户的打开文件数限制,可用'*'号表示修改所有用户的限制;soft或hard指定要修改软限制还是硬限制;10240则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制)。修改完后保存文件。
第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
session required /lib/security/pam_limits.so
这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件。
第三步,查看Linux系统级的最大打开文件数限制,使用如下命令:
[speng@as4 ~]$ cat /proc/sys/fs/file-max
12158
这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)12158个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值。通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不应该修改此限制,除非想为用户级打开文件数限制设置超过此限制的值。修改此硬限制的方法是修改/etc/rc.local脚本,在脚本中添加如下行:
echo 22158 > /proc/sys/fs/file-max
这是让Linux在启动完成后强行将系统级打开文件数硬限制设置为22158。修改完后保存此文件。
完成上述步骤后重启系统,一般情况下就可以将Linux系统对指定用户的单一进程允许同时打开的最大文件数限制设为指定的数值。如果重启后用ulimit-n命令查看用户可打开文件数限制仍然低于上述步骤中设置的最大值,这可能是因为在用户登录脚本/etc/profile中使用ulimit-n命令已经将用户可同时打开的文件数做了限制。由于通过ulimit-n修改系统对用户可同时打开文件的最大数限制时,新修改的值只能小于或等于上次ulimit-n设置的值,因此想用此命令增大这个限制值是不可能的。所以,如果有上述问题存在,就只能去打开/etc/profile脚本文件,在文件中查找是否使用了ulimit-n限制了用户可同时打开的最大文件数量,如果找到,则删除这行命令,或者将其设置的值改为合适的值,然后保存文件,用户退出并重新登录系统即可。
通过上述步骤,就为支持高并发TCP连接处理的通讯处理程序解除关于打开文件数量方面的系统限制。
2、修改网络内核对TCP连接的有关限制
内核编译时默认设置的本地端口号范围可能太小,因此需要修改此本地端口范围限制。
修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_local_port_range = 1024 65000
这表明将系统对本地端口范围限制设置为1024~65000之间。请注意,本地端口范围的最小值必须大于或等于1024;而端口范围的最大值则应小于或等于65535。修改完后保存此文件。
如果是网站,可以加上以下行
net.ipv4.ip_conntrack_max = 163840
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5120
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
fs.file-max = 1024000
Linux tcp连接数太高
昨天的mrtg 的统计图显示 连接数超过1000 ,所以查了一下:
[root@localhost db]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 92
SYN_RECV 246
CLOSE_WAIT 12
ESTABLISHED 547
FIN_WAIT1 33
CLOSING 1
SYN_SENT 6
TIME_WAIT 2243
TIME_WAIT 太高了,查了一下网上的资料,参考:http://blog.csdn.net/Avoid/archive/2007/11/29/1908038.aspx
# vi /etc/sysctl.conf
添加如下内容
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies=1
保存退出后执行
# sysctl -p
说明
net.ipv4.tcp_syncookies=1 打开TIME-WAIT套接字重用功能,对于存在大量连接的Web服务器非常有效。
net.ipv4.tcp_tw_recyle=1
net.ipv4.tcp_tw_reuse=1 减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。
AS5默认已经设置,所以不出现大量的TIME_WAIT
修改后:
[root@localhost db]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 100
SYN_RECV 242
CLOSE_WAIT 10
ESTABLISHED 472
FIN_WAIT1 36
FIN_WAIT2 2
CLOSING 7
SYN_SENT 10
TIME_WAIT 294
但是不知道修改后的真正的效果怎样。
分享到:
相关推荐
TCP连接数指的是同一时间一个计算机系统通过TCP协议能够建立的并发连接的数量。这个值通常受到操作系统、硬件资源和配置参数的影响。了解如何设置和查看TCP连接数对于网络管理员和开发者来说是至关重要的,因为它...
TCP连接数修改TCP连接数修改TCP连接数修改TCP连接数修改
查看TCP连接数 1)统计80端口连接数 netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数 ps -ef|grep httpd|wc -l 3)、统计已连接上的,状态为“established netstat -na|grep ESTABLISHED|wc -l
然而,操作系统通常会对同一时间可建立的TCP连接数进行限制,这是为了防止资源耗尽和系统崩溃。这个限制可能在某些需要大量并发连接的场景下成为瓶颈,比如大数据抓取、负载测试或分布式计算。"破解TCP连接数限制"这...
本资源提供的是一段易语言编写的源码,其功能是修改系统的TCP连接数。理解这个知识点,我们需要先了解几个基本概念: 1. **TCP(Transmission Control Protocol)**:传输控制协议,是一种面向连接的、可靠的、基于...
"查看端口的TCP连接数 查看有多少人连上来了"这个主题涉及到的是系统监控和网络安全的重要方面,主要目的是了解特定端口上的活动连接数量,以便分析服务器性能或检测潜在的安全威胁。下面将详细介绍相关的知识点。 ...
15关于监控k8s集群经验总结以及监控容器的tcp连接数
这两个键值分别控制最大用户端口范围和总的TCP连接数。适当增加这些值可以提升并发连接数。 2. **系统策略编辑器**:对于企业环境,可以通过组策略编辑器(gpedit.msc)调整网络策略,比如限制特定用户的并发连接数...
在这个特定的场景中,我们讨论的是如何使用易语言来修改系统的TCP连接数。 TCP(Transmission Control Protocol)是互联网上最常用的传输层协议之一,负责在两台设备之间建立可靠的数据通信。系统TCP连接数指的是...
TCP连接数指的是在同一时间,操作系统允许的最大并发TCP连接的数量。这个限制通常由系统内核参数设定,对于不同的应用场景,如服务器、客户端或者网络设备,可能需要调整这个值以优化性能。 标题“tcp连接数修改...
本资源“易语言修改系统TCP连接数源码.zip”包含了一个使用易语言编写的程序,该程序的目的是修改系统的TCP连接数限制。 在Windows操作系统中,系统默认对TCP连接数有一定的限制,这可能是出于系统稳定性和资源管理...
本资源是一个关于易语言的源代码示例,主要功能是修改系统的TCP连接数。在深入探讨这个源码之前,我们需要理解TCP连接数的概念以及为何需要修改它。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的...
"Linux修改TCP连接数" Linux 操作系统中,TCP 连接数的限制是由多个因素决定的,其中包括用户进程可打开的文件数限制、网络端口限制和系统对 TCP 连接的跟踪限制。为了提高 Linux 操作系统中的 TCP 连接数,我们...
针对 tcp 连接数,超过阀值,报警 针对 tcp 连接数,超过阀值,报警 程序片段
本文将详细介绍如何使用Zabbix监控TCP连接数,包括监控特定状态的TCP连接,如FIN_WAIT2、CLOSE_WAIT、TIME_WAIT等。 首先,我们要实现监控TCP连接数,需要在Zabbix中创建一个脚本。在提供的脚本示例中,`tcp_status...
在Linux系统如何修改TCP连接数,文件数限制修改、网络端口限制修改;修改用户进程可打开文件数限制;修改网络内核对TCP连接的有关限制;使用支持高并发网络I/O的编程技术
- `TcpNumConnections`设定的是最大TCP连接数,根据实际需求设置,但需要注意过高的设置可能会导致内存消耗增加。 2. **系统策略编辑器**: - 如果服务器使用了组策略,可以通过系统策略编辑器进行设置。打开...
默认情况下,Windows对同时建立的TCP连接数量有所限制,这可能会影响到多任务并行处理,比如使用下载工具时的速度。本文将详细介绍如何修改Windows TCP/IP连接数以提高下载速度和网络性能。 首先,理解TCP/IP连接数...
关于TCP服务器最大并发连接数有一种误解就是“因为端口号上限为65535,所以TCP服务器理论上的可承载的最大并发连接数也是65535”。 先说结论:对于TCP服务端进程来说,他可以同时连接的客户端数量并不受限于可用端口...
这个工具可以修改机器的TCP/IP最大连接数