2017-05-30 50 views
0

包org.apache.http.impl.conn的HttpConnPool.class中的生存时间(TTL)变量是什么?做?在HttpConnPool中设置生存时间或TTL后,虚拟服务器上的LoadTest会成功,但它有什么作用?

我在虚拟服务器上运行了一些负载测试。当我每秒接近9个请求时。我得到了随机NoHttpResponseException,目标未能响应或虚拟服务器未能响应。

然后我添加了一个名为“TTL”或“TimetoLive”的属性并给它一个值。 HttpResponseException停止产生。我想知道这个变量是如何防止NoHttpResponseException首先出现的。

回答

0

其实我自己也想出了答案。

在我的负载测试中,最初我们得到了“NoHttpResponseException,目标服务器@Somelink:PortNumber无法响应。”在loadtest期间,因为httpClient维护持久连接,意味着同一个连接发送多个请求。这样更有效率。有一个evictor线程,我们已经设置了一定的毫秒或秒。 evictor线程将在一定的毫秒后删除空闲连接。在生产过程中,可能会出现空闲连接,因为我们一直没有交通。现在,在Load测试期间,由于我们始终将请求始终发送到客户端服务器,因此连接不会空闲。因此,连接不会被驱逐,并且TTL属性被设置为默认值“-1”,这意味着无限(这对我的应用程序来说,对于每个应用程序而言都取决于开发人员设置的值)。

TTL是一个属性,它定义连接必须处于活动状态的时间长度,而不管它是否处于空闲状态。如果该属性设置为“-1”,则连接将永远保持活动状态,或者至少在客户端服务器关闭它之前保持活动状态。客户端服务器通常在一段时间后关闭连接。没有服务器永远保持连接。新的连接将始终建立。

在此期间,当客户端关闭我们的连接时,我们的服务器将假定连接已建立,但客户端未发送响应。因此它返回NoHttpResponseException,即目标服务器无法响应。添加TTL属性将确保删除任何持久连接,无论它是否处于空闲状态。因此,我们将始终有一个防止NoHttpResponseException的新连接。

我希望这会有所帮助。

相关问题