Linux 서버에서 열 수있는 최대 TCP 소켓 수를 제어하는 커널 매개 변수 또는 기타 설정은 무엇입니까? 더 많은 연결을 허용 할 때의 단점은 무엇입니까?
ab 를 사용 하여 Apache 서버를로드 테스트하는 동안 서버 에서 열린 연결을 최대한 쉽게 확장 할 수 있음을 알았습니다 . 연결 재사용을 허용하는 ab의 -k 옵션을 생략하고 약 10,000 개 이상의 요청을 보내도록하면 Apache가 첫 번째 11,000 정도의 요청을 처리 한 다음 60 초 동안 정지합니다. netstat 출력을 보면 TIME_WAIT 상태에서 11,000 개의 연결이 표시됩니다. 분명히 이것은 정상입니다. TCP 안정성 때문에 클라이언트와의 연결이 완료된 후에도 연결은 기본적으로 60 초 동안 열려 있습니다.
이것이 서버를 DoS하는 쉬운 방법 인 것처럼 보이며 일반적인 튜닝 및 예방 조치가 무엇인지 궁금합니다.
내 테스트 출력은 다음과 같습니다.
# ab -c 5 -n 50000 http://localhost/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> 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