-
네트워크 연결 최대 개수tip 2012. 10. 22. 17:07
하나의 서버가 얼마나 많은 연결을 제한하고 있는지 궁금하시나요? 이 글을 통해 그 답을 얻을 수 있기를 바랍니다.
listen (sockfd, backlog)
흔히 소켓(Socket) 을 이용한 서버 프로그램은 listen(sockfd, backlog) 함수를 이용하여 클라이언트의 접속을 기다리고 있게 됩니다. 첫 번째 파라미터인 sockfd 는 파일의 최대 개수와 관련이 있고, 두 번째 파라미터인 backlog 는 연결되지 않은 요청을 큐에 넣을 수 있는 최대 큐의 길이와 관련하고 있습니다. 큐가 가득찼다면 ECONNREFUSED 에러를 발생합니다.
SOCKFD
sockfd 는 ulimit -a 명령어로 확인할 수 있습니다.
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
BACKLOG
backlog 의 최대값은 <sys/socket.h> 에 정의된 SOMAXCONN 을 참조합니다. 아래와 같이 sysctl 명령어를 이용하면 값을 확인하고 원하는 개수로 수정할 수 있습니다. 참고로 SOMAXCONN 은 socket max connection 의 약어입니다. 아래는 각 운영체제 별로 SOMAXCONN 값을 확인할 수 있는 방법입니다.
OS Command to specify the backlog
Notes
AIX
/usr/sbin/no -o somaxconn=1024
Default=1024
Solaris
/usr/sbin/ndd -set /dev/tcp
tcp_conn_req_max_q 1024
Default=128
Windows
HKLM
\System
\CurrentControlSet
\Services
\NetBt
\Parameters
MaxConnBacklog (REG_DWORD)
Default=1000
Linux Kernel 2.2
# SOMAXCONN 값 확인하기
/sbin/sysctl -a | grep soma
# SOMAXCONN 값 변경하기
/sbin/sysctl -w net.core.somaxconn = 2048
메모리가 128MB 보다 작을 경우 128일 기본이고 클 경우 1024가 기본이다.
참고로 SOMAXCONN은 listen 큐를 크게 하는 것은 조금 더 많은 RAM 의 비용을 지불하게 만드는 DoS 공격을 피하기위해 보다 좋은 작업이라고 합니다.
참고)
Network Tuning and Performance Guide
https://calomel.org/network_performance.html
Linux: Increasing the number of open file descriptors
https://cs.uwaterloo.ca/~brecht/servers/openfiles.html
'tip' 카테고리의 다른 글
엑셀에서 케리지 리턴 찾아 없애는 방법 (0) 2013.07.29 Visual Studio 2012 migration from VS 2005 or 2008 (0) 2012.12.19 윈도우 기본 공유폴더 제거 및 사용자 인증 적용하기 (0) 2012.08.28 VMWare 와 WinDbg 를 연결하여 디버기 하기 (0) 2012.08.24 SecureDNS (0) 2012.08.22