「服务器长连接」如何应对「更大负载」? (服务器长连接 更大负载)

服务器长连接是一种常用的客户端与服务器之间通信的方式,它能够建立一条长时间保持的连接,实现双方之间的实时通信。然而,在面对大量请求时,服务器长连接容易出现更大负载问题,导致服务器崩溃或者严重影响服务器性能。本文将探讨如何应对更大负载问题,以保证服务器长连接的正常运行。

1、服务器资源的动态调整

服务器应该对资源进行动态调整,以保证不会过载。服务器负载主要受到CPU、内存、磁盘等资源的影响,若一个客户端发起连接请求,服务器应该及时分配足够的资源。如果现有资源无法满足请求,应该主动关闭一些连接释放资源。此外,在负载过高时,服务器可以将连接重定向到备份服务器,以分流压力。

2、资源的合理利用

服务器应该合理利用资源。一般来说,服务器连接数及其它系统参数通常会调整到一个较高的数量,而未必能够正常工作。未使用的资源可能存在浪费的情况,因此合理利用资源是保证服务器能够正常工作的关键。在实际应用中,服务器应该优先处理已建立的连接,而不是仅关注新连接请求。这样能够更好地利用服务器资源,提高处理性能。

3、负载均衡

服务器负载均衡是另一个解决更大负载问题的重要方法。负载均衡能够将请求均衡地分配给多个服务器,从而保证每个服务器的负载均衡。负载均衡的方式通常有IP层负载均衡和应用层负载均衡两种。IP层负载均衡是基于网络层的负载均衡,主要利用集群或者交换机等的硬件设备来实现。应用层负载均衡则是基于应用程序的负载均衡,实现负载均衡的软件通常运行在普通服务器上。负载均衡能够使系统更加健壮,提高了系统的容错能力。

4、缓存层

缓存层也是保证服务器长连接正常运行的一种方法。缓存层可以将经常访问的数据存放在缓存中,从而在应用服务器上降低大量的读和写操作。缓存能够有效减轻数据库压力,提高读写性能。但是,缓存并不能解决所有的问题。当缓存更新的速度跟不上查询速度时,缓存的效果会大打折扣。因此,为了保证高速率的数据使用,我们还要关注缓存的命中率,提高缓存完整的调度能力。

5、优化数据库

优化数据库是保证服务器长连接正常运行的另一个重要方法。数据库表格应该分成多个表,避免全部归纳到一个表中,这样能够更好地利用服务器资源。尽可能使用索引。索引能够极大地缩短查询时间,提高相应速度,但会带来增加系统复杂度的问题和增加写入条件。此外,还应该定期清理没有使用的索引,以释放资源。数据应该定期备份和压缩,以减少磁盘占用空间,提高写入速度。

本文介绍了如何应对服务器长连接更大负载问题,包括服务器资源动态调整、资源合理利用、负载均衡、缓存层和优化数据库等。在面对大量请求时,服务器长连接容易出现更大负载问题。因此,我们需要通过合理的资源规划和有效的性能优化手段来提供满足客户需求,并提供高度合理、经济高效的服务。达到了提高服务器长连接性能和效率的目的。

相关问题拓展阅读:

【TCP】单台服务器并发 TCP 连接数到底可以有多少 ?

长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。

长连接,是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。

聊天室或即时消息推送系统等,因为很多消息需要到产生时才推送给客户端,所以当没有消息产生时,就需要hold住客户端的连接,这样,当有大量的客户端时,要hold住大量的长连接。

在性能测试过程中,经常会接触到连接数相关的问题,有一个问题曾经困扰我好长时间,那就是一台服务器最多能支持多少链接数呢?

有的朋友可能会说是65535,因为操作系统有65535个端口,那么这个答案准确吗?

首先先了解下如何标识一个链接(记住下面的概念,文章后面要用到),操作系统是通过一个四元组来标识一个TCP链接:

{本地ip,本地port,远程ip,远程port}

这四个要素唯一确定一个TCP链接,任意一个要素不相同,就认为是一个不同的链接。

在Linux系统中,一切皆文件,每一个TCP链接都要占用一个文件句柄,系统允许创建的链接数取决于句柄数的上限。超过这个值再创建链接就会报这样的错误:“Can’t open so many files”。

通过命令ulimit -n可以查看当前系统允许打开文件数量的上限,在Linux中这个值默认是1024,也就是说默认情况下,只能创建1024个链接。同时这个值也是可以修改的,通过修改/etc/security/limits.conf文件,可以把这个值改大,一般服务器都会改的很大,比如我们的服务器上一般设置为。

那这么说是不是就意味大桐着只要我改的很大,链接数可以无限大了?

其实也并不是这样,创建链接的时候,一般分为两个端, 即链接的发起端和链接接收端。

比如我们现在使用Jmeter进行压测,被测系统部署在Tomcat服务器10.0.0.3上,使用的是8080端口。

如果我们用5个并发来进行压测的话,创建的链接如下图所示:

对于Jmeter来说,它是链接发起端,Jmeter创建了5个链接去连接服务端的8080端口,每个新建链接会占用了一个端口号,如图中的。在操作系统中,端口号的范围是,其中0-1024是预留端口号,不可使用,其他的端口都仿和是可以使用的。也就是说, 在链接发起端,受端口号的限制理论上最多可以创建64000左右链接。

那么有没有办法超过这个限制呢,答案是肯定的!

通过TCP标识的四元组可以看到,对于链接发起端,影响链接数的是本地ip和port,端口号受限于65535,已经没办法增加了。那我们可以增加本地ip来达到这个目的。一般情况下,服务器的一个网卡上只绑定了一个ip,对外通信都使用这个ip进行。其实网卡是支持一个绑定多个IP的,当然必须确保ip是有效的且未使用的。

# ifconfig eth0:1 10.0.0.5

以上命令可以在eth0网卡上增加一个ip 10.0.0.5,服务器网卡每增加一个ip,就可以允许在这个ip上再创建65535左右的链接数。

曾经做过一个邮件网关的链接数测试,目的是为了测试网关服务器可以接收并且保持多少TCP长连接。正常情况下,受限于单台机器65535端口号的影响,客户端想创建25万TCP长连接,至少需要4台机器。通过对客户端网卡绑定多IP的方法,成功在一台机器上创建了25万个链接。

当然,这种手段只是一种非常规的操作,只是为了进行某种特殊场景的测试。正常情况下不推荐网卡绑定多个IP。

对于Tomcat服务器来讲,它是链接接收端,它是不是也受限于65535呢?

并不是,从上面图中可以看到,Jmeter发起的所有链接都创建在Tomcat服务器的8080端口,也就是说对于链接接收端,所有的链接占用的是同一个端口。

根据TCP标识四元组可以分析出, 一个链接接收端备仿盯,更大的TCP链接数=所有有效ip排列组合的数量*端口数量64000 ,这个计算结果应该是一个天文数字。 因此链接接收端支持的链接数理论上可以认为是无限大的。

上面介绍的一些数据都是理论上单台机器可以支持的TCP链接数, 实际情况下,每创建一个链接需要消耗一定的内存,大概是4-10kb,所以链接数也受限于机器的总内存。

链接发起端,活力全开才64000左右链接,内存最多才占用640M,一般客户端都能 满足,内存限制主要还是考虑服务器端。

虽然现在的集群,分布式技术可以为我们将并发负载分担在多台服务器上,那我们只需要扩展出数十台电脑就可以解决问题,但是我们更希望能更大的挖掘单台服务器的资源,先努力垂直扩展,再进行水平扩展,这样可以有效的节省服务器相关的开支(硬件资源、机房、运维人力、电力其实也是一笔不小的开支)。

首先需要考虑文件句柄的限制。在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是“Socket/File:Can’t open so many files”。这时你需要明白操作系统对可以打开的更大文件数的限制。

我们可以通过ulimit -n命令、/etc/security/limits.conf 文件 以及 /etc/sysctl.conf 文件等来修改文件句柄数。

其次要考虑的是端口范围的限制,操作系统上端口号1024以下是系统保留的,从是用户使用的。

由于每个TCP连接都要占一个端口号,所以我们最多可以有60000多个并发连接。我想有这种错误思路朋友不在少数吧?

面试官也比较喜欢在这里引导挖坑,类似的问题还有:一个UDP连接可以复用已经被TCP连接占用的端口嘛?

如何标识一个TCP连接?

系统使用一个4四元组来唯一标识一个TCP连接:

本地端口号 local port、本地IP地址 local ip、远端端口号 remote port、远端IP地址 remote ip。

server通常固定在某个本地端口上监听,等待client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的,因此更大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,更大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机更大tcp连接数约为2的48次方。

上面给出的结论都是理论上的单机TCP并发连接数,实际上单机并发连接数肯定要受硬件资源(内存)、网络资源(带宽)的限制。

单台服务器更大支持多少连接数

单机服务器支持千万级并发长连接的压力测试

HTTP长连接200万尝试及调优

一次百万长连接压测 Nginx 内存溢出问题

大并发下TCP内存消耗优化小记(86万并发业务正常服务)

TCP长连接与短连接的区别

Linux系统设置–ulimit

HTTP的长连接和短连接

网络连接中的长连接和短链接是什么意思?

性能优化篇-使用长连接提升服务性能

设置FTP服务器,连接到主机的客户端超出了更大连接数,将会出现?

超出会提示服务繁忙 占时无法访问或其他报错信息

200人族颤陆同时访兆顷问就会加大你的服务器负载导致运行缓慢,同样的正在使用ftp的客户机也会受相应影响变下载洞清或上传速度变慢

他会出现这样的情况。 你的会话被拒绝,服务器终止连镇友接。

更大连接御宏槐数是200,要看你如何用,如果连接的人就几个同学够了,用CUTFTP等工具下载,一个文件可以有5个会话,10个文件是50,如果10个同学同时下载 就是500了。明白了吗

当然绝巧如果用IE下载,则只有一个会话。

FTP服务器上的连接数与XP上的连接数是二回事,FTP连接数是会话层的连接个数

另外补充, FTP如何拒绝超过连接数的,信息是可以自己定义的,通常有一个默认,当然也也可以修改它,不是必须的固定的招式

关于服务器长连接 更大负载的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 「服务器长连接」如何应对「更大负载」? (服务器长连接 更大负载)