我们有一个大型的 Web 项目(大约每秒 2-3k 个请求),使用 haproxy(http://haproxy.1wt.eu/) 作为 Java 应用服务器之间的前端和负载平衡器。前端 (haproxy) 在 Linux 上运行,但我们将把它迁移到 Solaris 10,因为我们的所有其他服务器都在 Solaris 下运行。
切换流量后,我发现了两件事:a) 网站加载速度变慢(图片加载需要 5-10 秒,而 Linux 上需要 2-3 秒)b) 有时 haproxy 无法执行“生命检查”(获取特殊网页并分析 http 响应代码),这是由于套接字超时造成的。将流量切换回 Linux 后,一切正常。
我尝试调整在 /dev/tcp 中找到的所有参数,但没有进展。我相信问题出在某些开放套接字限制上。如果有人能告诉我答案,我将不胜感激。
ps haproxy 在 Linux 上的 Xen DomU(内核 2.6.18,Debian 5)下、Solaris 上的区域(10 u8)下运行。我们在 Linux 上做的唯一一件事就是增加 ip_conntrack_max(我相信 Solaris 选项 tcp_conn_req_max_q 是等效的)。
答案1
在 solaris 上,通常您必须扩展源端口范围(默认情况下只有 16k 个端口)并减少默认设置为 240 秒的 time_wait 间隔,否则您很快就会没有空闲端口来建立传出连接。不幸的是,我现在不记得参数名称了,从记忆中它位于 /dev/tcp 中,超时类似于 tcp_timewait_interval,端口可能位于 min_port 和 max_port 中。
如果 haproxy 后面的服务器需要很长时间才能响应,您可能还需要增加文件描述符的最大数量,以便支持更多并发套接字。我记得 /etc/system 中有一些类似“fdlim_cur”和“fdlim_max”的东西,默认情况下未设置。我记得在更改这些之后您必须重新启动,我不知道 solaris 10 是否仍然如此。不幸的是,距离我上次在那里做一些调整已经过去好几年了 :-/
希望这有帮助!