高并发TCP连接数目问题

Linux的TCP连接数到达2万,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出现什么问题 当 TCP 连接数达到 2 万且关键指标高位运行时,需重点关注端口资源内存压力队列溢出和应用性能。通过调整内核参数、优化应用设计、使用长连接和监控工具,可以有效缓解问题。对于超大规模场景,可能需要结合负载均衡或内核旁路技术进一步优化。 阅读详情

 

linux可通过五元组唯一确定一个链接:源IP,源端口,目的IP,目的端口,传输层协议。而一个端口不允许被两个及以上进程占用(一个进程可同时占用多个端口),据此是否可以推测一台linux服务器最多可以同时处理2^16(65536,或65K)个链接即并发请求呢?

一台服务器到底能够支持多少TCP并发连接呢?

1. 文件描述符限制

对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的连接到来返回给我们的错误是"Socket/File:Can't open so many files"。

这时,你需要明白操作系统可以打开最大文件数的限制。

1)进程限制(用户限制)

执行 ulimit -n 输出1024,说明对于一个进程而言最多只能打开1024个文件,所以你要采用此默认配置最多也就可以并发上千个TCP连接。

临时修改:ulimit -n 1000000,但是这种临时修改只对当前登录的用户目前使用的环境有效,系统重启或用户退出会就失效。

永久生效:修改/etc/security/limits.conf 文件:

                *    soft    nofile    1000000

                *    hard    nofile    1000000

            ulimit -SHn 1000000 >> /etc/rc.local

2)全局限制

执行 cat /proc/sys/fs/file-nr

1216    0    187612

>1216:已经分配的文件描述符数

>0:已经分配但没有使用的文件描述符数,这里的意思是内核分配了1216,然后1216个都用光了,所以“分配了但没有使用的句柄数目”为 0 。

>187612:最大文件句柄数

注意:在kernel2.6 版本中第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件描述符无一浪费的都已经被使用。可以通过在/etc/sysctl.conf里定义fs.file-max = 1000000 来调整最后一个值的大小。

2.  端口号范围限制

操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的,由于每个tcp连接都要占用一个端口号,所以我们最多可以使用60000多个并发连接,这是对客户端的理解。

分析一下:

1) 如何标识一个TCP连接? 系统用一个4元组来标识一个TCP连接:(local ip,local port,remote ip,remote port) 。对于accept来说,accept的sock不占新的端口,而我们作为服务器实际只是使用了bind这一个端口。

说明端口65535并不是并发量的限制。

2) server最大tcp连接数:server通常固定在某一个本地端口上监听,等待client的连接请求。不考虑地址重用的情况下,即使多个ip,本地监听端口也是独占的。因此server端tcp连接4元组中只有remote ip 和 remote port 是可变的,因此最大tcp连接数为客户端ip数 * 客户端port数。 对于ipv4,不考虑ip地址等因素,最大tcp连接约为2的32次方(ip数) * 2的16次方(port数)。

也就是server端:单机最大tcp连接数约为:2的48次方。

附加问题:

问题1:查看文件描述符使用 lsof查看到的句柄数和/proc/sys/fs/file-nr 值不一样,为什么?

        [root@localhost ~]# lsof | wc -l

        710

        [root@localhost ~]# cat /proc/sys/fs/file-nr

        416    0    1000000

答案:一个文件可以被多个进程打开,lsof所列出来的是每个进程所打开的文件,所以lsof的数值比file-nr要大很正常。

问题2:关于文件句柄到底设置多大合适?

查看句柄数的方法:

        [root@node1 ~]# cat /proc/sys/fs/file-nr

        832    0    97321       

        [root@node1 ~]# cat /proc/sys/fs/file-max

        97321       

默认最大句柄数为97321。

这个值在kernel的文档里意思是file-max一般为内存大小(KB)的10%来计算,如果使用shell,可以这样计算:

grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}' 

计算出来的值一般和默认最大句柄数近似。

echo "fs.file-max = 100133" >> /etc/sysctl.conf && sysctl -p

解决高并发socket最大连接数所受的各种限制(解除IO限制)

1.  修改用户进程可打开文件数限制

修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hardlimit)。软限制是指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系统级的最大打开文件数限制,使用如下命令:

$ 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连接的有关限制

在Linux上编写支持高并发TCP连接的客户端通讯处理程序时,有时会发现尽管已经解除了系统对用户同时打开文件数的限制,但仍会出现并发TCP连接数增加到一定数量时,再也无法成功建立新的TCP连接的现象。出现这种现在的原因有多种。

第一种原因可能是因为Linux网络内核对本地端口号范围有限制。此时,进一步分析为什么无法建立TCP连接,会发现问题出在connect()调用返回失败,查看系统错误提示消息是“Can’t assign requested address”。同时,如果在此时用tcpdump工具监视网络,会发现根本没有TCP连接时客户端发SYN包的网络流量。这些情况说明问题在于本地Linux系统内核中有限制。其实,问题的根本原因在于Linux内核的TCP/IP协议实现模块对系统中所有的客户端TCP连接对应的本地端口号的范围进行了限制(例如,内核限制本地端口号的范围为1024~32768之间)。当系统中某一时刻同时存在太多的TCP客户端连接时,由于每个TCP客户端连接都要占用一个唯一的本地端口号(此端口号在系统的本地端口号范围限制中),如果现有的TCP客户端连接已将所有的本地端口号占满,则此时就无法为新的TCP客户端连接分配一个本地端口号了,因此系统会在这种情况下在connect()调用中返回失败,并将错误提示消息设为“Can’t assign requested address”。有关这些控制逻辑可以查看Linux内核源代码,以linux2.6内核为例,可以查看tcp_ipv4.c文件中如下函数:

static int tcp_v4_hash_connect(struct sock *sk)

请注意上述函数中对变量sysctl_local_port_range的访问控制。变量sysctl_local_port_range的初始化则是在tcp.c文件中的如下函数中设置:

void __init tcp_init(void)

内核编译时默认设置的本地端口号范围可能太小,因此需要修改此本地端口范围限制。

第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:

net.ipv4.ip_local_port_range = 1024 65000

这表明将系统对本地端口范围限制设置为1024~65000之间。请注意,本地端口范围的最小值必须大于或等于1024;而端口范围的最大值则应小于或等于65535。修改完后保存此文件。

第二步,执行sysctl命令:

$ sysctl -p

如果系统没有错误提示,就表明新的本地端口范围设置成功。如果按上述端口范围进行设置,则理论上单独一个进程最多可以同时建立60000多个TCP客户端连接。

第二种无法建立TCP连接的原因可能是因为Linux网络内核的IP_TABLE防火墙对最大跟踪的TCP连接数有限制。此时程序会表现为在 connect()调用中阻塞,如同死机,如果用tcpdump工具监视网络,也会发现根本没有TCP连接时客户端发SYN包的网络流量。由于 IP_TABLE防火墙在内核中会对每个TCP连接的状态进行跟踪,跟踪信息将会放在位于内核内存中的conntrackdatabase中,这个数据库的大小有限,当系统中存在过多的TCP连接时,数据库容量不足,IP_TABLE无法为新的TCP连接建立跟踪信息,于是表现为在connect()调用中阻塞。此时就必须修改内核对最大跟踪的TCP连接数的限制,方法同修改内核对本地端口号范围的限制是类似的:

第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:

net.ipv4.ip_conntrack_max = 10240

这表明将系统对最大跟踪的TCP连接数限制设置为10240。请注意,此限制值要尽量小,以节省对内核内存的占用。

第二步,执行sysctl命令:

$ sysctl -p

如果系统没有错误提示,就表明系统对新的最大跟踪的TCP连接数限制修改成功。如果按上述参数进行设置,则理论上单独一个进程最多可以同时建立10000多个TCP客户端连接。

3. 使用支持高并发网络I/O的编程技术

在Linux上编写高并发TCP连接应用程序时,必须使用合适的网络I/O技术和I/O事件分派机制。

可用的I/O技术有同步I/O,非阻塞式同步I/O(也称反应式I/O),以及异步I/O。在高TCP并发的情形下,如果使用同步I/O,这会严重阻塞程序的运转,除非为每个TCP连接的I/O创建一个线程。但是,过多的线程又会因系统对线程的调度造成巨大开销。因此,在高TCP并发的情形下使用同步 I/O是不可取的,这时可以考虑使用非阻塞式同步I/O或异步I/O。非阻塞式同步I/O的技术包括使用select(),poll(),epoll等机制。异步I/O的技术就是使用AIO。

从I/O事件分派机制来看,使用select()是不合适的,因为它所支持的并发连接数有限(通常在1024个以内)。如果考虑性能,poll()也是不合适的,尽管它可以支持的较高的TCP并发数,但是由于其采用“轮询”机制,当并发数较高时,其运行效率相当低,并可能存在I/O事件分派不均,导致部分TCP连接上的I/O出现“饥饿”现象。而如果使用epoll或AIO,则没有上述问题(早期Linux内核的AIO技术实现是通过在内核中为每个 I/O请求创建一个线程来实现的,这种实现机制在高并发TCP连接的情形下使用其实也有严重的性能问题。但在最新的Linux内核中,AIO的实现已经得到改进)。

综上所述,在开发支持高并发TCP连接的Linux应用程序时,应尽量使用epoll或AIO技术来实现并发的TCP连接上的I/O控制,这将为提升程序对高并发TCP连接的支持提供有效的I/O保证。

4. 内核参数sysctl.conf的优化

/etc/sysctl.conf 是用来控制linux网络的配置文件,对于依赖网络的程序(如web服务器和cache服务器)非常重要,RHEL默认提供的最好调整。

推荐配置(把原/etc/sysctl.conf内容清掉,把下面内容复制进去):

net.ipv4.ip_local_port_range = 1024 65536

net.core.rmem_max=16777216

net.core.wmem_max=16777216

net.ipv4.tcp_rmem=4096 87380 16777216

net.ipv4.tcp_wmem=4096 65536 16777216

net.ipv4.tcp_fin_timeout = 10

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_window_scaling = 0

net.ipv4.tcp_sack = 0

net.core.netdev_max_backlog = 30000

net.ipv4.tcp_no_metrics_save=1

net.core.somaxconn = 262144

net.ipv4.tcp_syncookies = 0

net.ipv4.tcp_max_orphans = 262144

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_synack_retries = 2

net.ipv4.tcp_syn_retries = 2

这个配置参考于cache服务器varnish的推荐配置和SunOne 服务器系统优化的推荐配置。varnish调优推荐配置的地址为:http://varnish.projects.linpro.no/wiki/Performance

不过varnish推荐的配置是有问题的,实际运行表明“net.ipv4.tcp_fin_timeout = 3”的配置会导致页面经常打不开;并且当网友使用的是IE6浏览器时,访问网站一段时间后,所有网页都会打不开,重启浏览器后正常。可能是国外的网速快吧,我们国情决定需要调整“net.ipv4.tcp_fin_timeout = 10”,在10s的情况下,一切正常(实际运行结论)。

修改完毕后,执行:

/sbin/sysctl -p /etc/sysctl.conf

/sbin/sysctl -w net.ipv4.route.flush=1

5. 调整文件数

linux系统优化完网络必须调高系统允许打开的文件数才能支持大的并发,默认1024是远远不够的。

执行命令:

echo ulimit -HSn 65536 >> /etc/rc.local

echo ulimit -HSn 65536 >>/root/.bash_profile

ulimit -HSn 65536

 

参考:

  1. linux单台服务器上并发TCP链接数
  2. Linux下解决高并发socket最大连接数所受的各种限制(解除IO限制)
  3. Linux下高并发socket最大连接数所受的各种限制
  4. Linux下查看并发连接数

分类: 网络编程

解决高并发场景中的连接延迟:TCP 优化与队头阻塞问题剖析 TCP 队头阻塞可能导致高并发场景下的连接延迟暴涨,影响应用的性能和稳定性。本文深度剖析队头阻塞的成因及优化策略,助你提升系统响应速度和吞吐量。 阅读详情

相关推荐

TCP高并发连接:从工具使用到系统调优的完整指南

摘要:本文系统介绍了实现5万TCP并发连接测试的完整方案。通过TCPkali工具进行性能压测,针对系统资源限制、端口耗尽等瓶颈问题,提出内核参数调优、多源IP绑定等解决方案。详细阐述了TCPkali的编译安装、测试命令配置、结果分析方法,以及连接数卡在28,242时的突破方法,包括文件描述符调整、TCP内存优化等关键技术。同时提供了分布式测试架构设计、性能监控指标和典型错误处理方法,为高并发系统测试提供了实用指导。

数字人生 377

Windows Socket 最大连接数

Socket 编程时,单机最多可以建立多少个 TCP 连接,受到操作系统的影响。   Windows 下单机的TCP连接数受多个参数影响:    最大TCP连接数 [HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] TcpNumConnections = 0x00fffffe

韦庆礼的专栏 java C# .NET JSP 4659

【影像组学入门百问】1#---#3

理论上讲三大主流平台Windows, Linux和MacOS均可进行影像组学研究。根据笔者实际经验,如果内存不足可能导致软件罢工,其余显示、GPU等均非必要。显示:最小分辨率为1024×768(推荐为1280×1024或更好)。Slicer中的许多计算都是多线程的,并且将受益于多核,多CPU配置。计算机需要足够的内存和图形功能将原始数据和处理结果保存在其内存中。如涉及深度学习等方法的研究需根据实际需求配置电脑,无法一概而论。接口设备:推荐使用带滚轮的三键鼠标。内存:超过4GB(推荐8G以上)。

weixin_38594676的博客 1484

通过TCP Allocate连接数告警了解prometheus-NodeExporter数据采集及相关知识扩散

1.问题由来 近日有环境告警如下:TCP Allocate连接数过多 很多资料告诉我们使用:netstat –ant |grep^tcp | wc –l命令查询,但查询的值与告警中获取的只相差很大,于是下载NodeExporter的源码进行查看进行一探究竟。 源文件:https://www.cnblogs.com/yaohong/p/16046499.html 2.NodeExporte...

yaohong 1957

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 379

【无标题】EXCEL实现刷题

运用Excel开发的刷题工具,具有普遍实用性,可将WORD的试题自动导入并实现刷题。

weixin_44081794的博客 2971

高并发TCP连接时处理方法

高并发、TCP。本文重点介绍高并发TCP连接时和一些数量限制,以及处理的一些方法。当集中快速建立TCP连接时会出现无法初始化socket的情况,导致无法建立TCP连接,处理失败。其主要原因是操作系统对一个端口同时处理的socket连接数量进行了限制, 一般为1024。当应用系统完成操作释放连接时,并不能马上释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放。这样当有浪涌的TCP连接请求时容易导致大量的TCP连接无法建立。

jackiejane的博客 1536

LightTools中VBA宏的编写入门

LightTools和VBA联动

bestgamer的博客 2348

TCP 请求太多,造成无法创建连接处理方法

2进入 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters。新建 DWORD 类型的注册表项,命名为:TCPTimedWaitDelay。新建 DWORD 类型的注册表项,命名为:MaxUserPort。值数据(双击MaxUserPort提示输入值): 65534(用。(TIME_WAIT的自动断开时间,默认为4分钟);的格式录入进去,此值的有效范围为5000-//cmd 命令查看请求。//cmd 统计数量。

qq_36247791的博客 1167

南邮 2024 软件安全 实验四 自动脱壳+手动脱壳

这次这个实验很简单,就是一个简单的脱壳,然后进行爆破就行了,解法非常的多这里不多讲,会简单讲一下特殊情况这个点开是这样子:然后放进peid里面查看,我这个是原版的PEid,所以显示出来是这样:会显示nothing found,但其实如果你使用吾爱破解的魔改过的peid,它就会显示具体的壳名:然后你点击右下角的那个箭头,里面会有很多的插件用来自动脱壳:你也可以使用这个通用脱壳器,但是脱壳后的程序无法运行,这个放到后面讲。

ARbing_an的博客 2561

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

baidu_35680696的博客 968

tcp服务端无故死掉了linux,TCP服务端socket会丢连接的诡异问题及思考

最近在跟踪项目的性能测试的过程中,发现了一个奇怪的问题:Netty服务器端新建的Channel的数目比Tcpdump抓包得到的经历过三次握手成功的连接数要少:总有几个连接从抓包来看成功,然后Netty并没有为其分配Channel。直观上来看,似乎是Netty的处理问题值得怀疑,似乎是用于接受新连接的线程池堵塞了。深入追踪下去,发现问题不在Netty身上,而是操作系统没有通过IO事件反馈给应用程序(...

weixin_39622283的博客 645

猿创征文|Qt 文件和目录应用讲解【QCoreApplication】【QFile、QFileInfo】【QTemporaryDir和QTemporaryFile】【QDir】【QFileSyste】

Qt 文件和目录精准讲解【QCoreApplication】【QFile、QFileInfo】【QTemporaryDir和QTemporaryFile】【QDir】【QFileSyste】【QFileDialog】 第一章 QCoreApplication类 第一节 QCoreApplication常用函数方法 第二节 QCoreApplication举例 第二章 QFile类 第一节 静态函数方法 第二节 成员函数方法 第三章 QFileInfo类 第一节 常用函数方法 第四章 QDir类

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 942

TCP 连接断连问题剖析

TCP 连接的保持并不需要任何额外的操作,但在实际应用中,要长时间保持一个 TCP 连接则会受到诸多因素的影响。本文介绍了几种常见的导致 TCP 连接断连的原因,并在此基础上,以 AIX 系统上 TCP 连接的异常断连为例,借助相应的网络分析工具,逐步揭开 AIX 上 TCP 断连的原因,并给出两种可行的解决方案。<br />引言 <br />在官方的正式文档中,TCP/IP 协议簇也称为国际互联网协议簇。TCP/IP 协议簇是目前使用最为广泛的全球互联网技术,其分层结构如图 1 所示:<br />图 1.

RTC hacker 2168

【赛题解析&命令脚本配置】2024年第十七届山东省技能大赛 | 网络系统管理”赛项-模块B:Linux服务部署 & ⑤客户端OutsideCli和InsideCli工作任务

【赛题解析&命令脚本配置】2024年第十七届山东省技能大赛 | 网络系统管理”赛项-模块B:Linux服务部署 & ⑤客户端OutsideCli和InsideCli工作任务 | 【赛题解析&命令脚本配置】2024年第十七届山东省技能大赛 | 网络系统管理”赛项-模块B:Linux服务部署 & ⑤客户端OutsideCli和InsideCli工作任务

君逍遥o 319

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux下 TCP 连接限制如何解除,解决socket高并发连接数限制,tcp默认1024个连接

就再也不能建立tcp连接,然后在互联网上搜索,发现linux系统默认的ulimit为1024,这是用户最多可开启的程序数目。当用户使用Linux作为系统时,socket在运行高并发的TCP程序时,可能会遇到连接数量到一定个数后被阻断的情况。我在工作的时候,测试高并发tcp程序(GPS服务器端程序),经过多次测试之后,发现每次建立的连接到达1000个左右。第一步,修改/etc/security/limits.conf文件,在文件中添加如下行(*指代系统用户名),

CloudCatal的博客 2528

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TCP高并发连接数

转自: 单机最大tcp连接数 网络编程 在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接 在确定最大连接数之前,先来看看系统如何标识一个tcp连接。系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}。 client最大tcp连接数 client每次发起tcp连接请求时,除非绑定端口,通常会

chenxijie1985的专栏 1813

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

如果TCP连接出现问题该如何排查,说明排查的思路

以上是我对TCP连接问题排查思路的简要介绍,如果您想了解更多的细节和实例,您可以参考以下一些网页:- [TCP连接的状态详解以及故障排查](^1^):这个网页介绍了TCP连接的各个状态以及相关的命令和工具。- [TCP/IP 通信故障排除指南](^2^):这个网页提供了一个故障排除清单和一些常见问题和解决方案。- [Connection reset原因分析及解决思路](^3^):这个网页分析了一种常见的TCP连接异常情况,并给出了相应的解决思路。

usstmiracle的博客 1万+

TCP的连接

一、套接字 1、每一条TCP连接有两个端点,TCP连接的端点叫做套接字(socket)或插口。 2、套接字(socket)=(IP地址:端口) 例如:套接字 (socket)=(192.168.170.1:80)。 二、TCP连接 1、建立连接时的三次“握手”,如下图所示: (1)客户端的应用程序发送TCP连接请求报文,把自己的状态告诉对方,这个报文的TCP 首部SYN标记位是1,ACK标记位为0,序号(scq) 为x,这个x被称为客户端的初始序列号, 其值通常为0。发送出连接请求报文后,

kxbdys的博客 1万+

TCP连接的TIMEWAIT问题

TIMEWAIT是友好的    TCP要保证在所有可能的情况下使得所有的数据都能够被正确送达。当你关闭一个socket时,主动关闭一端的socket将进入TIME_WAIT状态,而被动关闭一方则转入CLOSED状态,这的确能够保证所有的数据都被传输。当一个socket关闭的时候,是通过两端四次握手完成的,当一端调用close()时,就说明本端没有数据要发送了。这好似看来在握手完成以后,socket...

沉迷代码无法自拔 470

配置支持高并发TCP连接的Linux服务器全攻略

1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量 的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许 当前用户进程打开的文件数限制: [speng@as4 ~]$ ulimi

把握自己。 4366

利用netty实现支持高并发的Tcp短连接接收服务

如果你对Netty有所了解,我们利用Netty写Tcp服务时,通常会继承SimpleChannelUpstreamHandler类,重写messageReceived函数进行数据的接收,如下就是个简单的tcp短连接服务样例: public class TelnetServerHandler extends SimpleChannelUpstreamHandler { ...

ainens006679的博客 1488

最大TCP连接数量问题总结

TCP连接限制问题总结最大TCP连接数量问题总结1、可用端口号限制2、文件描述符限制3、线程的限制4、内存的限制5、CPU的限制总结参考文献: 最大TCP连接数量问题总结 直接上答案 最大TCP连接数量限制有:可用端口号数量、文件描述符数量、线程、内存、CPU 1、可用端口号限制 Q:一台主机可以有多少端口号?端口号与TCP连接?是否能修改?端口号限制因素? 第一:端口号是16位的,所以总共有65535个,即可创建65535个TCP连接 第二:端口分为知名端口(0~1023)、注册端口(1024~4951

weixin_44380570的博客 9266

TCP连接常见面试问题

TCP连接与释放

m0_47265341的博客 821

Linux下解决高并发socket最大连接数限制,tcp默认1024个连接

linux作为服务器系统,当socket运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况   本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到1000左右时,再也不能建立tcp连接,最总上网搜索,linux系统默认ulimit为1024个访问用户最多可开启的程序数目。一般一个端口的最高连接为2的16次方65535 第一步,修改/etc/security/limits.conf文件,在文件中添加如下行(*指代系统用户名),修改Linux系统.

三侠剑的博客 2015
上一篇: 本文详解高并发场景下backlog的配置和作用
下一篇: Linux下查看并发连接数
王树民
博客等级 码龄10年 912粉丝 560原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值