이 글은 계속 업데이트 됩니다. 즐겨찾기 하고 가끔 필요할 때 확인해보세요.
커널 파라미터 설정
/etc/sysctl.conf
# /etc/sysctl.conf
# 할당 가능한 포트 번호 제한 해제
net.ipv4.ip_local_port_range=1024 65535
# accept()을 기다리는 ESTABLISHED 상태의 소켓(즉, connection completed)을 위한 queue
net.core.somaxconn=65535
# 각 네트워크 장치 별로 커널이 처리하도록 쌓아두는 Queue의 크기
net.core.netdev_max_backlog=5000
# SYN 백로그 큐 크기
net.ipv4.tcp_max_syn_backlog=30000
# TCP 연결에서 SYN Backlog가 가득찼을때
# SYN패킷을 SYN Backlog에 저장하지 않고 ISN(Initial Sequence Number 을 만들어서
# SYN + ACK를 클라이언트로 전송하여 SYN 패킷 Drop 방지
net.ipv4.tcp_syncookies=1
# 시스템이 가질 수 있는 TIME_WAIT 상태 소켓 개수 제한
net.ipv4.tcp_max_tw_buckets=1800000
# 사용할 수 있는 local port 수가 모자라면
# 현재 TIME_WAIT 상태의 소켓 중 프로토콜상 사용해도 무방해 보이는 소켓을 재사용
net.ipv4.tcp_tw_reuse=1
# 단시간에 sequence number가 overflow되는 상황에서
# 새로 수신한 패킷을 버리는 문제를 해결(*tcp_tw_reuse 옵션 사용을 위해 필수)
net.ipv4.tcp_timestamps=1
# 소켓이 TIME_WAIT 상태에 머무르는 시간을 1분 대신
# RTO(Retransmission Timeout) 시간만큼 변경하여 TIME_WAIT 상태의 소켓 수를 감소시킴
# --
# 기능사용시 네트워크 성능은 크게 향상되지만
# 클라이언트가 NAT/LB 환경인 경우 일부 클라이언트로 부터의 SYN 패킷이 유실 발생
net.ipv4.tcp_tw_recycle=0
# TCP 헤더의 옵션 필드에 window scale라는 필드를 정의하여
# advertise할 수 있는 receiver window size를 증가
net.ipv4.tcp_window_scaling=1
# receiver window size 증가를 위해 실제 커널에 설정된 소켓당 버퍼 크기를 증가
net.core.wmem_default=253952
net.core.rmem_default=253952
net.core.wmem_max=8388608
net.core.rmem_max=8388608
net.ipv4.tcp_wmem=8192 87380 8388608
net.ipv4.tcp_rmem=8192 87380 8388608
# 커널이 최대로 핸들링 할 수 있는 파일의 개수
fs.file-max=100000
Bash
복사
ulimit 설정
/etc/security/limits.conf
# /etc/security/limits.conf
# 코어 크기
# 코어 덤프 파일을 디버깅할 때 사용할 수 있으나, 크기가 매우 커서 서버 장애를 유발할 수 있음
<user> soft core 0
<user> hard core 0
# Openfiles 개수
# 프로세스가 핸들링할 수 있는 파일 개수
<user> soft nofile 524288
<user> hard nofile 524288
Bash
복사
참조
net.ipv4.tcp_tw_reuse, net.ipv4.tcp_tw_recycle 파라미터에 대해서 알고 싶다면?