实际使用TCP_DEFER_ACCEPT?

布拉奇利

我在网上仔细阅读了Apache httpd手册,并遇到了启用该命令的指令。在手册页中找到以下内容的描述tcp

   TCP_DEFER_ACCEPT (since Linux 2.4)
          Allow a listener to be awakened only when data arrives on the
          socket.  Takes an integer value (seconds), this can bound the
          maximum number of attempts TCP will make to complete the
          connection.  This option should not be used in code intended
          to be portable.

然后,我找到了这篇文章,但是我仍然不清楚这对哪种工作负载有用。我假设如果httpd有一个专门用于此的选项,则它必须与Web服务器有关。我还从事实出发,假设它是一种选择,而不仅仅是httpd网络连接的方式,在某些情况下,您需要使用它,而在其他情况下则不需要。

即使阅读了这篇文章,我也不清楚等待三种方式握手完成的好处。确保httpd在握手仍在进行时不必这样做来交换相关实例似乎是有利的,而不是在建立连接后可能引起该延迟。

对于本文而言,在我看来,无论TCP_DEFER_ACCEPT套接字状态如何,您仍将需要四个数据包(分别是握手和数据)。我不知道他们如何将计数减少到三,也无法提供有意义的增强。

所以我的问题基本上是:这只是一个过时的选择,还是该选项的实际用例?

爱因

(总结我对OP的评论)

他们所指的三向握手是TCP连接建立的一部分,所涉及的选项与此并不特别相关。还要注意,数据交换不是三向握手的一部分,这只是在打开/建立状态下创建了TCP连接。

关于此选项的存在,这不是套接字的传统行为,通常在接受连接时(仍然是在三种方式的握手完成之后)唤醒套接字处理程序的线程,并且对于某些协议,活动从此处开始(例如SMTP服务器发送220问候语),但对于HTTP,会话中的第一条消息是Web浏览器发送其GET / POST / etc行,在此之前,HTTP服务器对连接没有任何兴趣(计时除外)因此,在套接字接受完成时唤醒HTTP进程是一种浪费的活动,因为该进程将立即再次入睡,以等待必要的数据。

尽管确实有争议,唤醒空闲进程可以使它们“准备好”进行进一步处理(我特别记得唤醒非常旧的计算机上的登录终端,并让它们从swap插入),但是您也可以争辩说,任何具有换出该进程已在对其资源提出要求,而提出进一步不必要的要求可能会整体降低系统性能-即使您的单个线程的表观性能有所提高(这也可能不会如此,一个非常繁忙的计算机会在磁盘IO上出现瓶颈,这会导致如果您调换了其他东西的速度,就会放慢脚步,并且如果它很忙,则立即睡眠可以将其调换掉。)这似乎是一场赌博,最终“贪婪”的赌博不一定能在繁忙的机器上获得回报,

关于该性能调整级别的一般建议是,无论如何不要对最佳方案做出程序决定,而应让系统管理员和操作系统一起解决资源管理问题-这是他们的工作,而且它们很多更适合于了解整个系统以及其他系统的工作负载。提供选项和配置选择。

为了专门回答这个问题,该选项在所有配置上都是有益的,除非您承受HTTP流量的巨大负担,否则它不会达到您可能会注意到的水平,但是从理论上讲,这是“正确”的做法。这是一个选择,因为并非所有Unix(甚至不是所有Linux)版本都具有该功能,因此为了可移植性,可以将其配置为不被移植。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何确定实际使用的日志配置源Logback?

来自分类Dev

如何在并发环境中实际使用Git

来自分类Dev

Jade模板和angularjs的实际使用

来自分类Dev

实际使用的最高阶函数是什么?

来自分类Dev

WAMP-您的端口80未被实际使用

来自分类Dev

python实际使用哪种GC算法?

来自分类Dev

4D +阵列的实际使用

来自分类Dev

我应该实际使用哪个版本的jQuery?

来自分类Dev

Dart如何实际使用websocket pingInterval?

来自分类Dev

如何实际使用has_many:through并建立关系

来自分类Dev

foldl的实际使用

来自分类Dev

Swift NSLocalizedString实际使用

来自分类Dev

实际使用域是否安全?

来自分类Dev

Django:确定实际使用的pip包

来自分类Dev

查找实际使用的DLL与所引用的DLL

来自分类Dev

如何实际使用skimage保存图像(Python)

来自分类Dev

如何找出浏览器实际使用的网站图标

来自分类Dev

在领域中实际使用@Ignore吗?

来自分类Dev

PHP实际使用多少内存?

来自分类Dev

我怎么知道Juju实际使用的是哪台机器?

来自分类Dev

确定数组实际使用的大小

来自分类Dev

如何实际使用assimp获取骨骼和动画数据?

来自分类Dev

如何实际使用上下文?

来自分类Dev

如何在Python中实际使用NotImplementedError?

来自分类Dev

我怎么知道Juju实际使用的是哪台机器?

来自分类Dev

实际使用展开的跳过列表

来自分类Dev

Hadoop在项目中的实际使用

来自分类Dev

检查实际使用的glibc版本

来自分类Dev

如何实际使用 AddressSanitizer 和 MemorySanitizer?