Zettelkasten

웹소켓 수 늘리기 - 스푼라디오

·수정 2026.04.24·수정 3

요약

  • soc

본문

  • TCP 포트 field는 2x bytes 크기를 갖고 65536까지 가질 수 있음

  • 이건 서버가 핸들링할 수 있는 최대 주소수임

  • 64k까지는 제한되지 않음

  • 각 TCP 패킷은 2개의 port field를 갖는데 하나는 destination, 하나는 source를 위한 port임

  • 커널 옵션에는 socket 관련된 파라미터들을 fine tuning할 수 있는 옵션들이 있음

  • etc/security/limits.conf

    • soft/hard nofile 설정
      • soft는 지금 실제로 적용되는 기본값
      • hard는 soft가 올라갈 수 있는 상한값
    • ulimit -n 으로 설정하면 안되는 이유
      • 셀 세션 단위 설정이기 때문에 로그아웃하거나 systemd로 실행되면 적용이 안됨
  • /etc/sysctl.conf

    • fs.file-max: 최대 파일 디스크립터 제한, 기본값이 꽤 낮기때문에 조절 되어야함
    • net.ipv4.tcp_rmem, net.ipv4.tcp_wmem
      • write, read 버퍼 크기임
      • min, default, max를 설정할 수 있음
    • sysctl -p 명령어를 이용해 확인 가능함
  • 로드밸런서로는 HAProxy를 사용하는데 최신 Apache 2를 ws_tunnel module을 로드 밸런싱을 위해 사용

    • HAProxy processors가 열 수 있는 파일수를 최대로 올리기 위해 /etc/systemd/system/multi-user.target.wants/haproxy.service 에서 LimitNoFile 100000 또는 무한으로 설정 했음
  • 포트 고갈 문제(port exhaustion problem)

    • 네트워크를 경유하는 다른 머신들 사이의 커뮤니케이션을 실패한게 하는 TCP Port 고갈 문제를 해결하기 위해. multiple virtual network interfaces 을 사용함
sudo ifconfig ens3:1 10.0.11.32 netmask 255.255.255.0 up
  • 이 명령어는 인터넷 주소를 가상 네트워크 인터페이스 ens3:1에 bound 한는 명령어
  • HAProxy가 이 새로운 ip들을 사용할 수 있겠금 config 가 필요함

참고

https://medium.com/@elliekang/scaling-to-a-millions-websocket-concurrent-connections-at-spoon-radio-bbadd6ec1901 https://github.com/edwardyoon/Heimdallr