标签: keepalive

Haproxy - 超时 http 请求 vs 超时 http-keep-alive vs 超时服务器

我正在努力思考 haproxy 选项的方式

timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>
Run Code Online (Sandbox Code Playgroud)

彼此互动。我在位于 haproxy 负载均衡器后面的两个应用服务器上运行一个 Apache 网站。现在我没有启用 keep-alive,但我一直在尝试启用它,因为我认为它有助于优化网站。我的目标是为浏览器和 haproxy 之间的连接启用 keep-alive,但禁用 haproxy 和 apache 之间的 keep-alive。我用

option http-server-close
Run Code Online (Sandbox Code Playgroud)

现在我正在研究设置保持活动超时。我一直在研究超时 http-request 选项、超时 http-keep-alive 选项和超时服务器选项的haproxy 手册。如果我正确理解手册,超时 http-keep-alive 是在新请求之间保持连接打开的时间,超时 http-request 是在关闭连接之前等待响应标头的时间。但我似乎无法弄清楚的是超时服务器规定的内容。我想说超时服务器是等待完整响应的时间,但有人可以确认吗?如果我是对的,超时服务器是等待完整响应的时间,那么我是否正确,它不应该对保持活动超时设置有任何影响?

这是我正在修改的 haproxy 配置:

global
    maxconn 4096
    pidfile /var/run/haproxy.pid
    daemon

defaults
    mode http
    retries 3
    option redispatch
    maxconn 5000        
    timeout connect 5000
    timeout client 300000
    timeout server 300000        

listen HTTP *:80
    mode http
    cookie HTTP insert nocache
    balance roundrobin   
    #option httpclose …
Run Code Online (Sandbox Code Playgroud)

timeout haproxy keepalive keep-alive apache-2.2

9
推荐指数
1
解决办法
3万
查看次数

连接关闭与保持活动的影响

我正在配置我们的服务器,由于我们的负载平衡器的性质,我们无法发送连接保持活动的标头。我正在尝试确定将这些标头发送给最终用户和服务器的影响。任何一个都会注意到什么吗?

connection http-headers keepalive

8
推荐指数
1
解决办法
2万
查看次数

保持活动选项在 Linux 上不适用于传出连接

有谁知道 Linux 是否支持传出连接上的保持活动套接字选项?

我使用 keep-alive 选项建立了传出连接,但 netstat --timers 显示(我假设计时器已关闭):

tcp 0 0 localhost.localdomain:44307 172.16.0.15:2717 ESTABLISHED off (0.00/0/0)
Run Code Online (Sandbox Code Playgroud)

应用了相同套接字选项的传入连接显示:

tcp 0 0 172.16.0.3:8585 localhost.localdomain:21527 ESTABLISHED keepalive (29.26/0/0)
Run Code Online (Sandbox Code Playgroud)

我希望我能看到套接字选项,但 ss 或 lsof 都不会显示它们。

linux keepalive socket

8
推荐指数
1
解决办法
2万
查看次数

保活或不保活

我的公司正在推出一个新网站,在很短的窗口中可能会有大量访问者(估计在 2 分钟的窗口内访问者约为 14k)。

所以,我正在审查我们的配置,我现在最大的问题是我们使用 keep-alive 的单节点 HTTP 前端。前端在 CentOS 5.4 上运行 lighttpd 1.4。

一些假设:

  • 浏览器通常会打开 6 个并行 TCP 连接以保持活动状态
  • 浏览器将保持连接打开直到超时,即使选项卡已关闭(在 FF 中观察到,可能并非在每个浏览器上都如此)
  • 在服务器端,每个连接将消耗内核中约 150K 的内存(我使用 conntrack 并想保留它,这个估计是否正确?)
  • 我们所有的服务器都托管在东海岸。来自拉斯维加斯服务器的 RTT 大约为 80 毫秒。
  • 带有 keep-alive 的主页使用了大约 25 个 TCP 连接和 1500 个数据包。如果没有保持连接,这个数字会上升到大约 210 个 TCP 连接和超过 3200 个数据包。

因此,6*14000 = 84,000 个 TCP 连接。84,000 * 150KB ~= 12GB 内存。问题是: 1. 我在前端没有那么多可用的内存。2. lighttpd 1.4 对要管理的连接数量不是很满意。它伤害了命中/很多。

但另一方面,如果我停用 keepalive,我会担心 80 毫秒的 RTT。

我将通过 CDN 和带有辅助 lighttpd 的辅助 www 记录来缓解其中的一些问题。但辩论涉及保持活动功能。我想关闭它,但我担心对页面打开时间的影响会很大(RTT 高,数据包数量翻倍)。

内容检索完成后,我们有很多 ajax 请求用于浏览通常适合单个 …

performance lighttpd keepalive

7
推荐指数
1
解决办法
7647
查看次数

Apache - 保持活动还是不保持活动?

根据Magento 企业版高性能电子商务的方法和最佳实践(需要注册)keep alive 应该关闭(对于高流量站点)

如果服务器没有可用连接,mod_qos 还可以禁用保持活动支持。

所以问题是,我是否应该在低(360Mb)内存服务器中禁用/启用保持连接,保持连接是否有好处?

附带问题:根据 nestat,保持活动状态与拥有大量 TIME_WAIT 连接有什么关系?

TIME_WAIT 连接是否在浪费服务器资源,我应该尝试(如何?)保持它们的数量低吗?

keepalive apache-2.2

6
推荐指数
2
解决办法
2万
查看次数

如何避免heroku停止我的dyno?

我定期为客户构建MVP。我经常在 Heroku 上部署,以便他们可以查看产品是否有效并向潜在客户和投资者演示。

然后我在 heroku 上部署了一个应用程序,它就像一个魅力,如果不是为了一件小事。该应用程序需要大约 30 秒才能启动,如果没有流量,heroku 有一个令人讨厌的习惯,即杀死 dyno。我的客户现在将该应用程序用于演示目的,因此负载极低且断断续续。

我正在寻找一个最好的解决方案:

  • 具有成本效益
  • 可以同时应用于多个应用程序

避免第一个请求花费 30 秒的最佳方法是什么?

keepalive heroku

6
推荐指数
1
解决办法
8373
查看次数

(为什么)FreeBSD 'net.inet.tcp.always_keepalive' 是否违反了 RFC1122?

在处理在 FreeBSD 上运行并使用 TCP 的服务器应用程序时,我注意到即使我的应用程序明确禁用了 TCP 套接字上的 SO_KEEPALIVE,也会发送 TCP keepalive 探测。

根据RFC1122 第 4.2.3.6 节(TCP Keep-Alives):

“如果包含保持连接,应用程序必须能够为每个 TCP 连接打开或关闭它们,并且它们必须默认为关闭。”

我发现可调参数net.inet.tcp.always_keepalive已启用(设置为 1),禁用它会阻止发送 keepalive 探测器。

在 FreeBSD 中包含这种行为背后的原因是什么?据我所知,Linux 和 Windows 没有这样的选项,但 FreeBSD 和 Mac OS X 有,因此它们违反了 RFC。

更具体地说,在什么情况下忽略应用程序的愿望是有意义的?

在我的情况下,这是一个简单的修复,因为我可以禁用该选项,但我想了解它为什么在那里。

这个问题表明 Linux 的行为符合 RFC。

freebsd tcp keepalive

6
推荐指数
1
解决办法
1544
查看次数

在 Windows 系统上启用系统范围的 TCP keepalive

我可以更改/添加KeepAliveTime相关的注册表变量以使 Windows 机器在空闲连接上发送 TCP 保持活动数据包吗?

我想知道是否有人成功地完成了这项工作。具体来说,当应用程序在 TCP 连接上空闲时没有做任何特别的事情 (setsockopt) 来保持连接。

此 Microsoft TechNet 详细介绍了使用KeepAliveTime和相关注册表变量配置系统范围的 Keep-Alive

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime

看起来像是使用 keep-aliveLinux 系统范围的配置
但是,这需要程序使用setsockopt()并请求保持活动状态(对吗?)。

请记住,即使在内核中配置了 keepalive 支持,也不是 Linux 中的默认行为。程序必须使用setsockopt 接口为其套接字请求keepalive 控制。实现keepalive的程序相对较少......

windows tcp keepalive windows-registry

5
推荐指数
1
解决办法
3万
查看次数

Apache:对 HTTP 1.0 请求强制使用 HTTP 1.1 或 Persistent/KeepAlive 连接

我想对运行在 RHEL 5.8 上的 Apache 2.2.3 服务器上的所有 HTTP 请求强制保持活动或持久连接。许多网络爬虫出于某种原因使用 HTTP 1.0,我想要么强制持久连接,要么以某种方式强制这些连接使用 HTTP 1.1,以便 Apache 配置中的 Keep Alive On 设置将导致持久 HTTP。这是因为我想减少打开的 TCP 连接的数量。我怎样才能做到这一点?

http http-headers keepalive apache-2.2

5
推荐指数
1
解决办法
2950
查看次数

为 HTTPS 调整 Apache KeepAlive 超时

我的网站在任何地方都强制使用 HTTPS,平均首次加载时间为 3-5 秒。由于缓存,重复加载时间为 0.8 秒。

SSL 协商在我的服务器上需要 150-300 毫秒,因此我希望尽可能频繁地保持每个连接处于活动状态以防止延迟。

SSLSessionCache 设置为默认的 300 秒。

Apache KeepAlive 超时最近从 5 秒降低到 2 秒。

此更改导致服务器平均负载显着降低(平均 5% 而不是平均 10%),但我想知道如果首次加载时间为 3-5 秒,它是否也可能导致首次加载时间变慢?这是否意味着它必须在每次超过 2 秒超时时再次执行 SSL 协商?

使用更少的 SSL 协商(但更多睡眠 httpd 任务)获得略高的平均负载,还是使用更多 SSL 协商获得更低的平均负载更好?

我们肯定有足够的 CPU 和内存资源可供使用。所以最终的问题是,什么会为我们的观众带来最佳表现?将 KeepAlive 超时提高到 3-5,还是保持在 2?

谢谢!

optimization https performance-tuning keepalive apache-2.4

5
推荐指数
0
解决办法
3077
查看次数