我的公司正在推出一个新的网站,在很短的窗口内可能有大量的访问者(预计在2分钟内大约有14k人)。
所以,我正在检查我们的configuration,而我现在最大的问题是使用保持活动的单节点HTTP前端。 前端在CentOS 5.4上运行lighttpd 1.4。
一些假设:
那么,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 SLABS OBJ/SLAB CACHE SIZE NAME 40586 40586 100% 0.30K 3122 13 12488K ip_conntrack
和顶部
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
ip_conntrack为12MB,lighttpd为786MB。 我可以轻松地pipe理4倍。
所以,Keepalive,即空闲超时设置为5秒。
为什么不把Keepalive超时设置为15秒? 我没有看到2分钟内保持连接的理由。 我不认为浏览器将保持连接2分钟根据这个链接: http : //en.wikipedia.org/wiki/HTTP_persistent_connection#Use_in_web_browsers,1分钟超时似乎更现实。
我build议非常低(1秒)保持活着超时。
如果你在客户端执行基本的工作(正确的JS / CSSsorting,JS底部或asynchronous…),你可以设置保持活着非常低(1秒),因为不会有太多的延迟2次重复使用您的TCP连接。
毫无疑问,网页testing你的页面5s和1s(连接视图),你会看到是否打破了TCP连接的重用。
我试图在Apache的前端将它设置为0,而且这个数目肯定是太小了,但是1的数目还是不错的