我试图模拟TCP洪流来优化web服务器(计划部署在AWS上)。
我设置了一个“目标”VM,禁用了iptables,并在两个本地“源”机器上运行hping (hping -p 80 -i u1000 -c 1000 -S destaddr) (在这些机器的输出链中过滤RST )。
我本来希望在目标服务器的netstat输出中看到1000条SYN_RECV记录,但我只看到了256个最大记录(每台“源”计算机256个)。我似乎在“目标”机器上碰到了一些限制,却找不到它在哪里。tcp_max_syn_backlog增加到8096。
知道这个限制是在哪里设定的吗?
发布于 2013-06-22 16:13:01
好的,所以我在webhostingtalk上问了同样的问题,虽然没有得到直接的回答,但它有助于拓宽视野:)
基本上,我忽略了应用程序级别(webserver)的限制。但是,这位来自荷兰的好心绅士们挖掘得更深,并在这里发表了他非常相关的发现:
http://blog.dubbelboer.com/2012/04/09/syn-cookies.html
基本上,web服务器(我正在使用nginx)传递一个常量(限制)来侦听函数,它在这里定义:
https://github.com/git-mirror/nginx/...x_config.h#L97
因此,内核限制甚至还没有发挥作用。
Nginx常量是在其中编译的,所以我很快检查了apache -幸运的是它是可配置的:
http://httpd.apache.org/docs/2.0/mod...#listenbacklog
所以我把它设为8k,得到了我需要的东西(两个包丢失了):
来源:
hping -S -c 20000 -i u20 -p 80目标
目标:
netstat -nta _ grep SYN_RECV _ wc 8192 49152 729088
最后,我最初的256个连接限制实际上是因为我最初向端口22发送请求(而且sshd显然将tcp连接待办事项设置为256)。
https://serverfault.com/questions/517385
复制相似问题