ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크 연결 최대 개수
    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


Designed by Tistory.