Jul*_*ent 7 performance lighttpd keepalive
我的公司正在推出一个新网站,在很短的窗口中可能会有大量访问者(估计在 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 请求用于浏览通常适合单个 tcp 连接的站点。但我不确定浏览器是否会释放其他连接并保持打开状态。
我知道有很多关于保持活动消耗大量资源的讨论。我有点同意这一点,但考虑到假设和情况(我们一半用户的 RTT 在 80 毫秒到 100 毫秒之间),您认为停用它是否明智?
作为一个附带问题:您知道在哪里可以找到有关内核中连接大小和连接轨道大小的信息吗?(除了 printf size_of(sk_buff) )。
--- 编辑:一些测试结果我将 conntrack 配置为接受 500k 连接(考虑到内存占用,它不应超过 200MB)并启动 ab 测试。
ab -n 20000 -c 20000 -k http://website.com/banner.jpg
Run Code Online (Sandbox Code Playgroud)
从我在 tcpdump 中看到的,ab 在执行 GET 之前建立了所有连接。所以我了解了那些 20k 连接消耗了多少内存。
平板返回
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
40586 40586 100% 0.30K 3122 13 12488K ip_conntrack
Run Code Online (Sandbox Code Playgroud)
和顶部
PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP CODE DATA COMMAND
15 0 862m 786m 780 S 22.9 3.3 1:44.86 76m 172 786m lighttpd
Run Code Online (Sandbox Code Playgroud)
12MB 的 ip_conntrack 和 786MB 的 lighttpd 适合我的设置。我可以轻松管理 4 倍。
因此,keepalive 即空闲超时设置为 5 秒。
为什么不将 keepalive 超时设置为 15 秒?我不认为有理由将每个连接保持 2 分钟。而且我认为浏览器不会根据此链接保持连接 2 分钟:http://en.wikipedia.org/wiki/HTTP_persistent_connection#Use_in_web_browsers,1 分钟超时似乎更现实。