新物网

当前位置:首页 > 百科

百科

发生“Toomanyconnectsonserver“错误的原因和改进

时间:2023-10-18 14:30:48 闻子
HubbleDotNet 在过去的一年里,它得到了大量用户的大力支持和应用,其中一些用户的搜索浏览量相对较大,在使用过程中,有时会因为同时高并发访问过多而发生 Too many connects on server 为了减少这种情况,这个错误,HubbleDotNet 的 V1
HubbleDotNet 在过去的一年里,它得到了大量用户的大力支持和应用,其中一些用户的搜索浏览量相对较大,在使用过程中,有时会因为同时高并发访问过多而发生 Too many connects on server 为了减少这种情况,这个错误,HubbleDotNet 的 V1.0.4.0 版本号做了一些改进,下面我们就详细介绍一下这个改进就是相关的基本原理。

搜索系统中许多高并发用户访问的一般解决方案是分布式系统检索智能缓存文件的紧密结合 开发设计后面的版本。然而,分布式系统检索智能缓存服务通常会增加系统的硬件和软件成本。许多大、中、小页面的站点关键字搜索的浏览量不能达到大、中门户网站的总数水平。他们通常希望选择一个单一的系统来最大限度地实现自己的全面需求。为了使这些系统能够最大限度地降低成本,HubbleDotNet 的V1.0.4.0提供了最合适的解决方案,可以在一定程度上减少单机版搜索系统的许多并发问题。为了使这些系统能够最大限度地降低成本,HubbleDotNet 的V1.0.4.0提供了最合适的解决方案,可以在一定程度上减少单机版搜索系统的许多并发问题。

让我们先来看看 Too many connects on server 这个错误是如何形成的。

HubbleDotNet 它以创新的形式存在,HubbleDotNet 给出的客户端部件 Hubble.SqlClient.dll 根据TCP HubbledotNet的方法 从HubbledotNet中发布服务项目的检查要求 查询记录服务项目。每一个Hubleconetion 在实施HubbleConectionnnectionn之前,案例将与服务器保持TCP连接.Close 该原理与sql关闭连接 server 访问的基本原理是相似的。HubbleDotNet 在 Setting.xml 包含以下所示设备

32

该配置用于设置Hubledotnet 与此同时,服务项目有更多可接受的线程,默认有32个连接。如果线程数同时超过该设定的指定数,旧版本将报告 Too many connects on server这样的错误。

我们能通过增加这个线程数来解决大并发问题吗?答案不一定。

还有几个问题

1. 单机TCP线程数量非常有限。一旦用户将该值设置为1万,最终导致设备上的其他TCP连接无法连接。这怎么会发生?你可以看看我以前读过的一篇文章

Windows 下单机版本较大,TCP线程数较大

2. 设备处理能力相对有限

设备的处理能力就像一个水池,如果流到水比流出水好得多,那么这样的水池最终会溢出。例如,设备的处理能力是每秒搜索100次。因此,当高并发数量达到每秒100次时,即使最大连接数设置非常大,溢出最终也会发生在俱乐部,只有这个值设置大于设置这个小溢出的常用时间。


下边谈一谈 V1.0.4.0 所作的改善

改进1 等候体制
等待系统是,当线程数超过最大连接数时,后连接将等待一段时间,而不是直接出错。在这样的等待时间内,HubbleConnection 将多次尝试与服务器连接,一旦网络服务器有空闲连接,等待连接就可以成功匹配。在这样的等待时间内,HubbleConnection 将多次尝试与服务器连接,一旦网络服务器有空闲连接,等待连接就可以成功匹配。

等待时间由 HubbleConnection.ConnectionTimeout 本基本参数为秒,默认为300秒。如果超过此等待时间或无法匹配成功,则会触发网络连接的加班错误。

这一改进主要用于许多用户在短时间内访问。许多中小型网站,搜索浏览量不容易很大,但在某个时刻可能很高,如100ms和50页访问,最大连接32,即使设备处理能力每秒500次,旧版本仍然可能出错,V1.0.4.0 之后版本号出现这样的问题就不会出错了,许多高并发时的搜索时间很可能要长一点,比如几秒钟,这取决于设备性能缓存的设置。但是不会出错,所以对使用会更友好。但是不会出错,所以对使用会更友好。

等待系统和数据缓存请求加时使用,可以取得更好的效果

HubbleDotNet 数据缓存的原理是在移动客户端组件中缓存查看数据。如果缓存文件在查询过程中没有要求加班,则直接从移动客户端组件中获取数据,这大大缓解了搜索云服务器的工作压力。根据HubbleComand的超时间.CacheTimeout 本属性设置,单位为秒,默认-1,超时小于0,为无缓存文件。相当于0,表明每次都要问网络服务器缓存文件是否有利。如果网络服务器没有在两个浏览室更新,则缺乏对象缓存文件仍然有效,这是客户端缓存文件的正常使用,否则网络服务器将再次查看一侧。如果超过0,您将不知道网络服务器是否可行,直到缓存文件请求超时。

HubbleCommand 还有一个特点 ResetDataCacheAfterTimeout 假设这个属性是 true ,也就是说,无论网络服务器是否升级,这个设置通常用于解决被动模式下的非索引字段升级问题,这里没有做太多的表达。

显然,如果我们增加一个相对较长的缓存文件超过时间,云服务器的工作压力将大大降低(除非每个搜索都是不同的关键字,这种应用不是特别多,绝大多数应用或集中在一些流行的关键字,平台也可以通过类似的百度搜索,google 为了提高缓存的准确性,关键词提示功能诱发用户的流行关键词,缓解云服务器的工作压力)

改善2 当网络服务器忙碌时,强制应用缓存文件
HubbleConnection 这一类新增了一个 TryConnectTimeout 特性,该属性设置试图连接超时请求,单位为ms。当试图等待时间超过此设置时,让整个连接依据临时使用,即HubbleConectionnection.Open 此函数返回(此时未连接到服务器)。后面是HubbleComand 实行 SQL 在查询过程中,您将区分现阶段是否有缓存文件。如果是这样,无论缓存文件是否要求加班,您都将强制使用此缓存文件。如果没有,您将继续尝试连接,直到网络连接加班(此时不会区分此缓存文件) TryConnectTimeout 超时了,反而是分辨 ConnectionTimeout 超时了)。该参数的初始值为0,即不强制应用缓存文件。该参数的初始值为0,即不强制应用缓存文件。

这种设置的优点是在大并发时最大限度地降低响应速度。下面的例子说明

就像我们设置数据缓存请求超时300秒一样,一定的搜索条件 A 300秒前实施过一次,300秒后还要查看这个A,此时网站出现了浏览量洪峰,同时搜索浏览量超过32次(假设最大连接数为32次),假设A为第33个连接,平均检索时间为50ms,所以A最多会到达 1.6 只有秒后才能实施。如果设置Tryconettimeouteo= 200ms 200ms后,A立即回到300秒前的缓存文件,大大提高了网络服务器繁忙时的搜索响应速度。如果设置Tryconettimeouteo= 200ms 200ms后,A立即回到300秒前的缓存文件,大大提高了网络服务器繁忙时的搜索响应速度。

使用此参数时应注意