본문 바로가기

리눅스

네트워크 성능 튜닝

반응형

네트워크 성능 튜닝

1. 현재 설정 확인하기

네트워크 디바이스 백로그 확인

sudo sysctl net.core.netdev_max_backlog

소켓 연결 대기열 크기 확인

sudo sysctl net.core.somaxconn

TCP SYN 백로그 크기 확인

sudo sysctl net.ipv4.tcp_max_syn_backlog

2. 즉시 적용(시스템 재시작 전까지 유효)

sudo sysctl -w net.core.netdev_max_backlog=250000
sudo sysctl -w net.core.somaxconn=4096
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=8192

3. 영구 적용 (재시작 후에도 유지)

설정 파일 생성

sudo tee /etc/sysctl.d/99-net-tuning.conf <<'EOF'
# 네트워크 디바이스 패킷 백로그 (기본값: 1000)
net.core.netdev_max_backlog = 250000

# TCP 소켓 수신 대기열 크기 (기본값: 4096*)
net.core.somaxconn = 4096

# TCP SYN 연결 요청 대기열 (기본값: 1024)
net.ipv4.tcp_max_syn_backlog = 8192
EOF

변경사항 적용

sudo sysctl -p /etc/sysctl.d/99-net-tuning.conf

4. 추가 추천 파라미터

추가 성능 향상을 위한 설정

sudo tee -a /etc/sysctl.d/99-net-tuning.conf <<'EOF'
# TIME-WAIT 소켓 재사용 (고부하 서버에 적합)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0  # 주의: Linux 4.12+에서는 제거됨

# TCP 버퍼 크기 조정
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 연결 추적 테이블 크기 증가
net.netfilter.nf_conntrack_max = 262144
EOF

5. 적용 확인 및 모니터링

적용 확인

sudo sysctl -a | grep -E "netdev_max_backlog|somaxconn|tcp_max_syn"

모니터링 명령어

  • 현재 소켓 상태 확인
ss -lnt
  • 누락된 연결 확인
netstat -s | grep -i listen

우분투 24.04에서 Nginx 1.28 + PHP-FPM 8.3으로 운영하는 고성능 웹 서버에 적합한 설정

더보기

---

vim /etc/sysctl.d/99-web.conf
# /etc/sysctl.d/99-web.conf

# -------------------------------------------------
# 네트워크 성능 최적화 (고트래픽 연결 처리 향상)
# -------------------------------------------------
net.core.somaxconn = 4096                  # listen() 백로그 큐 크기 증가
net.ipv4.tcp_max_syn_backlog = 4096         # SYN 큐 크기 증가 (연결 스파이크 방지)
net.core.netdev_max_backlog = 5000         # 네트워크 디바이스 큐 크기

net.core.rmem_max = 16777216               # TCP 수신 버퍼 최대 (16MB)
net.core.wmem_max = 16777216               # TCP 송신 버퍼 최대 (16MB)
net.ipv4.tcp_rmem = 4096 87380 16777216    # min / default / max 수신 버퍼
net.ipv4.tcp_wmem = 4096 87380 16777216    # min / default / max 송신 버퍼

net.ipv4.tcp_window_scaling = 1            # 윈도우 스케일링 활성화
net.ipv4.tcp_slow_start_after_idle = 0     # 아이들 후 slow start 비활성화
net.ipv4.tcp_tw_reuse = 1                  # TIME-WAIT 소켓 재사용 (포트 고갈 방지)
net.ipv4.tcp_fin_timeout = 15              # TIME-WAIT 상태 지속 시간 단축
net.ipv4.tcp_keepalive_time = 300          # Keepalive 프로브 시작 시간
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 5

# BBR 혼잡 제어 알고리즘 사용 (대역폭 활용 극대화)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# TCP Fast Open 활성화 (연결 설정 지연 감소)
net.ipv4.tcp_fastopen = 3

# -------------------------------------------------
# 메모리 관리 최적화 (스왑 최소화, OOM 방지)
# -------------------------------------------------
vm.swappiness = 10                         # 스왑 사용 최소화 (RAM 우선 사용)
vm.overcommit_memory = 1                   # 메모리 초과 할당 허용 (PHP-FPM 안정성)
vm.dirty_ratio = 15                        # 더티 페이지 비율 (파일 시스템 I/O 부하 조절)
vm.dirty_background_ratio = 5
vm.dirty_expire_centisecs = 1500           # 더티 데이터 만료 시간 (15초)
vm.dirty_writeback_centisecs = 500         # 백그라운드 쓰기 주기 (5초)

# -------------------------------------------------
# 파일 디스크립터 및 리소스 한계 증가
# -------------------------------------------------
fs.file-max = 2097152                      # 시스템 전체 최대 파일 디스크립터
fs.inotify.max_user_watches = 524288       # 파일 감시 한계 (Nginx 재로드 등에 유용)

# -------------------------------------------------
# 기타 안정성 옵션
# -------------------------------------------------
net.ipv4.tcp_syncookies = 1                # SYN flood 공격 방어
net.ipv4.ip_local_port_range = 1024 65535  # 사용 가능한 임시 포트 범위 확대

---

 

728x90
반응형