我试图围绕haproxy选项 timeout http-request <timeout> timeout http-keep-alive <timeout> timeout server <timeout> 相互作用。 我在一个haproxy负载均衡器后面的两个应用程序服务器上运行Apache网站。 现在我没有保持活着,但我一直在尝试启用它,因为我认为这将有助于优化网站。 我的目标是为浏览器和haproxy之间的连接启用保持连接,但禁用haproxy和apache之间的保持连接。 我完成了这个 option http-server-close 现在我正在考虑设置保持活动超时。 我一直在研究haproxy手册的超时http-request选项,超时http-keep-alive选项和超时服务器选项。 如果我正确理解了手册,超时http-keep-alive是在新请求和超时之间保持连接的时间。http-request是在closures连接之前等待响应头的时间。 但我似乎无法弄清楚什么是超时服务器指定的。 我想说,超时服务器是等待完整响应的时间,但任何人都可以确认吗? 如果我是正确的,超时服务器是等待完整响应的时间,那么我是否正确,它不应该对保持活动超时设置有任何影响? 这是我正在修改的haproxyconfiguration: 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 […]
我的公司正在推出一个新的网站,在很短的窗口内可能有大量的访问者(预计在2分钟内大约有14k人)。 所以,我正在检查我们的configuration,而我现在最大的问题是使用保持活动的单节点HTTP前端。 前端在CentOS 5.4上运行lighttpd 1.4。 一些假设: 浏览器通常会打开6个并行TCP连接来保持活动状态 浏览器将保持连接处于打开状态,直到达到超时,即使该选项卡已closures(在FF中观察,在每个浏览器上可能都不是这样) 在服务器端,每个连接都会消耗内核的〜150K的内存(我使用conntrack并且想保留它,估计是否正确?) 我们所有的服务器都托pipe在东海岸。 来自拉斯维加斯的服务器的RTT大约是80ms。 具有保持活动的主页使用约25个TCP连接和1500个数据包。 没有保持活跃,这个数字上升到约210个TCP连接和超过3200个数据包。 那么,6 * 14000 = 84,000个TCP连接。 84,000 * 150KB〜= 12GB的内存。 这里是问题:1.我没有在前端可用的内存量。 2. lighttpd 1.4不太适合用这个连接来pipe理。 它伤害的命中/很多。 但是另一方面,如果我停用keepalive,我担心80ms RTT。 我将用一个辅助lighttpd减轻CDN和辅助wwwlogging中的一些问题。 但辩论涉及保持活力的特征。 我想把它关掉,但是我担心页面打开时间的影响会很高(高RTT和两倍的数据包)。 一旦完成了内容检索,我们就会有很多浏览网站的Ajax请求,这些请求通常适用于单个TCP连接。 但我不确定浏览器会释放其他连接,只保持一个打开。 我知道有很多讨论关于保持活力消耗很多资源。 我同意这一点,但考虑到假设和情况(一半的用户在80毫秒到100毫秒之间的RTT),你认为停用它是明智的吗? 作为一个侧面的问题:你知道我在哪里可以find关于内核连接大小和conntrack大小的信息? (printf size_of(sk_buff)除外)。 —编辑:一些testing结果我configurationconntrack接受500k连接(考虑到内存占用,它不应该超过200MB),并启动abtesting。 ab -n 20000 -c 20000 -k http://website.com/banner.jpg 从我在tcpdump中看到的,ab在执行GET之前build立所有连接。 所以我知道这些20k连接消耗了多less内存。 slabtop返回 OBJS ACTIVE USE OBJ SIZE […]
在使用运行在FreeBSD上的服务器应用程序并使用TCP时,我注意到即使我的应用程序显式禁用TCP套接字上的SO_KEEPALIVE,TCP保持活动探测也会被发送。 根据RFC1122第4.2.3.6节 (TCP Keep-Alives): “如果包含keepalive,应用程序必须能够打开或closures每个TCP连接,并且它们必须默认closures。” 我发现可调参数net.inet.tcp.always_keepalive已被启用(设置为1),禁用它将阻止keepalive探测发送。 在FreeBSD中包含这个行为的原因是什么? 据我所知,Linux和Windows没有这样的select,但是FreeBSD和Mac OS X都这样做,所以他们违反了RFC。 更具体地说,在什么情况下忽略申请的意愿是有意义的? 在我的情况下,这是一个简单的解决方法,因为我可以禁用该选项,但我想了解为什么它在那里。 这个问题表明Linux根据RFC运行。
根据与Magento企业版的高性能电子商务的方法和最佳实践 (需要注册)保持活着应该closures(高stream量的网站) mod_qos还可以在服务器没有空闲连接时禁用保持活动支持。 所以问题是,如果我在低(360Mb)内存服务器上保持活动状态为禁用/启用状态,保持活动状态还是有好处的吗? 侧面的问题:根据nestat有很多TIME_WAIT连接有什么关系吗? 是否TIME_WAIT连接浪费服务器资源,我应该尝试(如何?),以保持其数量低?
我定期为客户build立MVP 。 我经常在Heroku上进行部署,以便他们能够看到产品是否可以运行,并向潜在客户和投资者展示。 然后,我有一个应用程序部署在heroku上,它的作用就像一个魅力,如果不是一件小事。 该应用程序需要大约30秒的时间才能启动,而且如果没有交通stream量,heroku有一个恼人的杀死dyno的习惯。 我的客户现在正在使用该应用程序进行演示,因此负载非常低且间歇性。 我正在寻找一个解决scheme,最好是: 成本效益 可以同时应用于多个应用程序 避免第一次请求需要30秒的最佳方法是什么?
在客户站点中,networking团队在客户端和服务器之间添加了防火墙。 大约40分钟的空闲时间后,这会导致空闲连接断开。 networking人士说,防火墙没有任何空闲的连接超时,但事实是空闲的连接被打破。 为了解决这个问题,我们首先configuration了tcp_keepalive_time = 300,tcp_keepalive_intvl = 300和tcp_keepalive_probes = 30000的TCP keepalive服务器(一台Linux机器)。 这是有效的,连接可以持续数天或更长时间。 但是,我们也希望服务器检测到死的客户端并终止连接,所以我们将设置更改为time = 300,intvl = 180,probes = 10,认为如果客户端确实存在,服务器会每隔300s (5分钟),并且客户端将以ACK进行响应,并且防止防火墙将其视为空闲连接并将其消除。 如果客户端死了,10次探测之后,服务器将中止连接。 令我们吃惊的是,这些空闲而又活跃的联系人在大约40分钟后就像以前一样死亡。 运行在客户端上的Wireshark在服务器和客户端之间根本不显示任何keepalive,即使在服务器上启用keepalive也是如此。 这里会发生什么? 如果服务器上的keepalive设置是time = 300,intvl = 180,probes = 10,我认为如果客户端处于活动状态但空闲,服务器将每隔300秒发送一次keepalive探针,客户端已经死了,它会在300秒后发送一个,然后每隔180秒再发送9个探测器,然后再杀死连接。 我对吗? 一种可能性是防火墙以某种方式拦截来自服务器的keepalive探测器,并且无法将它们传递给客户端,并且获得探测器的事实使得认为连接处于活动状态。 这是防火墙的常见行为吗? 我们不知道涉及哪种防火墙。 服务器是Teradata节点,连接是从Teradata客户端实用程序到服务器端的端口1025的数据库服务器,但我们已经看到与SSH连接相同的问题,所以我们认为它会影响所有TCP连接。
场景: 在笔记本电脑上,连接到以太网并通过SSH连接到远程服务器 想要移动到笔记本电脑的办公室另一端,并改变到WiFi而不中断SSH连接 我试过了:首先连接到WiFi然后断开以太网; 并先断开以太网,然后连接到WiFi。 这两种方法都不行。 当使用Ubuntu和OS X服务器以及两个操作系统选项以及客户端时也尝试过。 没有运气。 好像我需要某种方式告诉我的SSH连接,它应该开始使用新连接的networking接口,而不是旧的断开连接的接口。 有任何想法吗? 我意识到,我可以整天待在WiFi上,但我不想这样做。 我也意识到,我可以在远程服务器的屏幕会话内工作,然后在更改接口后重新连接到该屏幕会话,但是我也不想这样做。 例如,我可能会通过SSH传输一些大的命令,如数据库转储,或者我可能通过SSHFS打开文件,或者我可能只是想避免重新连接的麻烦
有谁知道Linux是否支持传出连接上的保持活动套接字选项? 我做了一个传出连接保持活着选项,但netstat – 时间炫耀(我假设定时器closures): tcp 0 0 localhost.localdomain:44307 172.16.0.15:2717 ESTABLISHED off (0.00/0/0) 使用相同套接字选项的传入连接显示: tcp 0 0 172.16.0.3:8585 localhost.localdomain:21527 ESTABLISHED keepalive (29.26/0/0) 我希望我能看到套接字选项,但ss或lsof都不会让我看到它们。
我正在使用nginx和php-fpm来服务一个繁忙的基于mysql的站点。 目前我正在使用keepalive_timeout = 5 ,但是我不清楚如何最优地调整它。 所以感谢你的提示。
我正在configuration我们的服务器,并且由于负载均衡器的性质,我们无法发送连接保持活动标头。 我试图确定将这些头文件发送给最终用户和服务器的影响。 任何一个人会注意到什么?