【问题标题】:Connection timeout and socket timeout advice连接超时和套接字超时建议
【发布时间】:2015-07-09 19:51:39
【问题描述】:

我目前正在对连接和套接字超时设置进行一些研究,但我对这些东西还很陌生。

当我们通过对另一台服务器的 http 调用运行 json 时,我们正在考虑添加 40 秒作为连接和 sockettimeout。

    httpConnectionManagerParams.setConnectionTimeout(40000);
    httpConnectionManagerParams.setSoTimeout(40000);

但我真的不知道如何理解理想的设置或使用的最佳实践是什么。如果有人能给我一些关于何时考虑什么或如何对这些设置做出良好估计的提示,我将不胜感激。

我正在寻找的那种建议是...... 40 秒太长了,因为它可能会导致另一个问题......或者......您将此值设置得越高,您获得的机会就越大引起另一个问题......或者40秒根本不高......或者计算出一个理想的数字将Y乘以T

谢谢


编辑

添加服务器调用的萤火虫跟踪。

【问题讨论】:

    标签: sockets http networking network-programming


    【解决方案1】:

    没有任何理由为什么他们应该是平等的。分别考虑每个条件,您希望将其设置得足够高,以便超时将指示真正的问题,而不仅仅是暂时的过载,并且要足够低,以保持应用程序的响应能力。

    通常,40 秒对于连接超时来说太长了。我会怀疑地看待任何事情。服务器应该能够每秒接受数十或数百个连接。

    读取超时是完全不同的事情。如果存在这种情况,“正确”值完全取决于请求的平均服务时间及其差异。作为起点,您可能希望将其设置为预期服务时间的两倍,或平均服务时间加上两个或三个标准偏差,这完全取决于您的服务级别要求和服务器的性能及其差异。对此没有硬性规定。许多合同服务水平协议 (SLA) 指定了两秒的“正常”响应时间,这可能会通知您的审议。但这是你的决定。

    【讨论】:

    • 出色的答案,它引导我走上正确的道路,做出一些不明智的决定。连接超时应该是个位数,但套接字超时(即在服务器上等待响应一次所花费的时间)因应用程序而异。我将更改我上面的帖子,以包含远程服务器上性能最差的服务调用的跟踪。从这个跟踪来看,连接时间看起来非常快,但套接字响应时间是 33.29 秒,所以如果我将 so 超时设置为 45 秒,我认为这是有道理的。我走在正确的轨道上吗?
    • 听起来是一个不错的起点,但这取决于服务时间的差异。我还比较关心平均响应时间为 30 秒的服务。我希望首先改进这一点,不到 10 秒。
    • 谢谢...你的传奇。有趣的是,我做了这么久的 java web 程序员,但直到现在才不得不看这种东西。它之所以出现只是因为我们有一个旧的应用程序服务器,当服务调用由于网络延迟或托管服务的主机上的问题而永远不会返回时,该服务器正在挂起线程。
    • 好吧,只是指出连接超时与此无关。
    • 也许不是因为连接超时,而是因为超时,它对吗?
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 2011-05-11
    • 2012-11-17
    • 2011-02-05
    • 2018-11-26
    • 2020-06-02
    • 2016-10-02
    相关资源
    最近更新 更多