什么内核参数或其他设置控制可以在
Linux服务器上打开的最大TCP套接字数?允许更多连接的权衡是什么?
我注意到在使用ab对Apache服务器进行负载测试时,很容易最大化服务器上的打开连接.如果你不使用ab的-k选项,它允许连接重用,并让它发送超过10,000个请求,那么Apache服务前11,000个左右的请求,然后停止60秒.查看netstat输出显示TIME_WAIT状态下的11,000个连接.显然,这是正常的.即使在客户端完成TCP reliability reasons之后,连接仍保持打开默认值60秒.
看起来这对于DoS服务器来说是一种简单的方法,我想知道通常的调整和预防措施是什么.
这是我的测试输出:
# ab -c 5 -n 50000 http://localhost/
This is ApacheBench, Version 2.0.40-dev apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
apr_poll: The timeout specified has expired (70007)
Total of 11655 requests completed
这是我在测试期间运行的netstat命令:
# netstat --inet -p | grep "localhost:www" | sed -e 's/ \+/ /g' | cut -d' ' -f 1-4,6-7 | sort | uniq -c
11651 tcp 0 0 localhost:www TIME_WAIT -
1 tcp 0 1 localhost:44423 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44424 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44425 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44426 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44428 SYN_SENT 7831/ab