Linux

네트워크 연결 최대 개수

_Erato 2014. 8. 1. 13:52

[출처] : http://techpad.tistory.com/62


하나의 서버가 얼마나 많은 연결을 제한하고 있는지 궁금하시나요? 이 글을 통해 그 답을 얻을 수 있기를 바랍니다.


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