리눅스 서버의 TCP 네트워크 성능을 조정하는 커널 파라미터
- net.ipv4.tcp_max_syn_backlog
- net.core.somaxconn
- net.core.netdev_max_backlog
[Default 값]
net.core.netdev_max_backlog = 1000
net.ipv4.tcp_max_syn_backlog = 256
net.core.somaxconn = 128
[net.core.netdev_max_backlog]
네트워크 장치 별로 커널이 처리하도록 쌓아두는 Queue의 크기를 설정합니다.
커널의 패킷 처리속도가 Queue에 인입되는 속도보다 떨어진다면, Queue에 들어가지 못하는 패킷은 버려지게 됩니다.
Default는 1000으로 설정되어 있어, 1G 환경에서는 괜찮을것으로 보이나, 10G의 환경에서는 이를 늘리는것이 유용합니다.
해당 커널 파라미터는 trade-off 관계가 메모리 사용량 입니다.
$ sysctl -w net.core.netdev_max_backlog="5000"
[net.core.somaxconn]
Listen으로 바인딩 된 서버 소켓에서 accept를 기다리는 ESTABLISHED상태 소켓 개수에 관련된 커널 파라미터 입니다.
Default설정값은 128 입니다. (이 값은 65535보다 높을 수 없습니다. )
이 값은 listen 시스템 콜의 매개변수로 설정하는 backlog 값의 hard limit입니다.
서버 어프리케이션에서 listen시 설정해야 하겠지만, 먼저 이 hard limit을 늘려야 할 것입니다.
(net.ipv4.tcp_max_syn_backlog 가 받을 수 있는 maximum 값이다. )
$ sysctl -w net.core.somaxconn="1024"
[net.ipv4.tcp_max_syn_backlog]
Listen backlog와 연관된 커널 파라미터
SYN_RESEIVED 상태의 소켓을 위한 Queue입니다.
따라서, 해당 Queue는 주로 ACK 패킷 전송 속도가 느린 클라이언트에 의해 채워집니다. (or SYN플러드 공격하는 공격자)
Default 설정값은 256 입니다.
Queue가 가득차면 클라이언트가 연결할 수 없기 때문에, 마치 대상 포트가 닫힌 것처럼 "connection refused"가 발생합니다.
특히 HAProxy의 경우 maxconn까지 도달하면, 이 Queue에 대기합니다.
이로인해 클라이언트 측에서 지연이 발생하지만… 연결거부보다 나을 수 있습니다.
$ sysctl -w net.ipv4.tcp_max_syn_backlog="1024"
[주의사항]
1. Name=value 사이에 공백이 들어가면 아래와 같은 오류가 난다.
2. 이 명령어는 즉시적용인가? 그리고 영구적용인가?
변경사항은 즉시 적용 되지만, 지속적이지 않습니다.
시스템 재부팅 후에 기본값이 로드 됩니다.
영구적으로 설정하려면 /etc/sysctl.conf 또는 /etc/sysctl.d 디렉터리의 다른구성파일에 설정을 기록해야 합니다.
$ sysctl -w net.core.netdev_max_backlog="5000" >> /etc/sysctl.conf
$ sysctl -w net.core.somaxconn="1024" >> /etc/sysctl.conf
$ sysctl -w net.ipv4.tcp_max_syn_backlog="1024" >> /etc/sysctl.conf
'IT Knowledge > 기타' 카테고리의 다른 글
Redis 명령어 모음 사용법 (0) | 2023.09.03 |
---|---|
Redis Cluster On Kubernetes (0) | 2023.09.03 |
Tuned 개요 및 사용법 (4) | 2023.08.17 |
NFS wrong fs type 오류(CentOS) (1) | 2022.05.03 |
Yum 없이 패키지 설치(feat. CentOS gcc 설치) (3) | 2022.04.18 |
댓글