我正在努力思考 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) 我正在配置我们的服务器,由于我们的负载平衡器的性质,我们无法发送连接保持活动的标头。我正在尝试确定将这些标头发送给最终用户和服务器的影响。任何一个都会注意到什么吗?
有谁知道 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 都不会显示它们。
我的公司正在推出一个新网站,在很短的窗口中可能会有大量访问者(估计在 2 分钟的窗口内访问者约为 14k)。
所以,我正在审查我们的配置,我现在最大的问题是我们使用 keep-alive 的单节点 HTTP 前端。前端在 CentOS 5.4 上运行 lighttpd 1.4。
一些假设:
因此,6*14000 = 84,000 个 TCP 连接。84,000 * 150KB ~= 12GB 内存。问题是: 1. 我在前端没有那么多可用的内存。2. lighttpd 1.4 对要管理的连接数量不是很满意。它伤害了命中/很多。
但另一方面,如果我停用 keepalive,我会担心 80 毫秒的 RTT。
我将通过 CDN 和带有辅助 lighttpd 的辅助 www 记录来缓解其中的一些问题。但辩论涉及保持活动功能。我想关闭它,但我担心对页面打开时间的影响会很大(RTT 高,数据包数量翻倍)。
内容检索完成后,我们有很多 ajax 请求用于浏览通常适合单个 …
根据Magento 企业版高性能电子商务的方法和最佳实践(需要注册)keep alive 应该关闭(对于高流量站点)
如果服务器没有可用连接,mod_qos 还可以禁用保持活动支持。
所以问题是,我是否应该在低(360Mb)内存服务器中禁用/启用保持连接,保持连接是否有好处?
附带问题:根据 nestat,保持活动状态与拥有大量 TIME_WAIT 连接有什么关系?
TIME_WAIT 连接是否在浪费服务器资源,我应该尝试(如何?)保持它们的数量低吗?
我定期为客户构建MVP。我经常在 Heroku 上部署,以便他们可以查看产品是否有效并向潜在客户和投资者演示。
然后我在 heroku 上部署了一个应用程序,它就像一个魅力,如果不是为了一件小事。该应用程序需要大约 30 秒才能启动,如果没有流量,heroku 有一个令人讨厌的习惯,即杀死 dyno。我的客户现在将该应用程序用于演示目的,因此负载极低且断断续续。
我正在寻找一个最好的解决方案:
避免第一个请求花费 30 秒的最佳方法是什么?
在处理在 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。
我可以更改/添加KeepAliveTime相关的注册表变量以使 Windows 机器在空闲连接上发送 TCP 保持活动数据包吗?
我想知道是否有人成功地完成了这项工作。具体来说,当应用程序在 TCP 连接上空闲时没有做任何特别的事情 (setsockopt) 来保持连接。
此 Microsoft TechNet 详细介绍了使用KeepAliveTime和相关注册表变量配置系统范围的 Keep-Alive。
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime
看起来像是使用 keep-alive的Linux 系统范围的配置。
但是,这需要程序使用setsockopt()并请求保持活动状态(对吗?)。
请记住,即使在内核中配置了 keepalive 支持,也不是 Linux 中的默认行为。程序必须使用setsockopt 接口为其套接字请求keepalive 控制。实现keepalive的程序相对较少......
我想对运行在 RHEL 5.8 上的 Apache 2.2.3 服务器上的所有 HTTP 请求强制保持活动或持久连接。许多网络爬虫出于某种原因使用 HTTP 1.0,我想要么强制持久连接,要么以某种方式强制这些连接使用 HTTP 1.1,以便 Apache 配置中的 Keep Alive On 设置将导致持久 HTTP。这是因为我想减少打开的 TCP 连接的数量。我怎样才能做到这一点?
我的网站在任何地方都强制使用 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?
谢谢!
keepalive ×10
apache-2.2 ×3
http-headers ×2
tcp ×2
apache-2.4 ×1
connection ×1
freebsd ×1
haproxy ×1
heroku ×1
http ×1
https ×1
keep-alive ×1
lighttpd ×1
linux ×1
optimization ×1
performance ×1
socket ×1
timeout ×1
windows ×1