2 분 소요

리눅스 커널은 수많은 파라미터를 통해 시스템 동작을 세밀하게 제어할 수 있습니다. 기본값은 범용적으로 설계되어 있어, 특정 워크로드에 맞게 튜닝하면 상당한 성능 향상을 기대할 수 있습니다.

서버 코드 이미지

커널 파라미터 최적화로 성능을 극대화하는 서버

sysctl 기본 사용법

# 현재 파라미터 값 확인
sysctl vm.swappiness
sysctl net.core.somaxconn

# 모든 파라미터 목록 확인
sysctl -a

# 런타임에 값 변경 (재부팅 시 초기화)
sysctl -w vm.swappiness=10

# 영구 적용 (파일에 저장)
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p  # 설정 파일 즉시 반영

네트워크 성능 튜닝

TCP 연결 처리 최적화

# /etc/sysctl.d/99-network.conf

# SYN 백로그 큐 크기 증가 (대용량 트래픽 처리)
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# TIME_WAIT 소켓 재사용 (빠른 포트 재사용)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15

# 소켓 수신/송신 버퍼 크기
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864

# 연결 큐 백로그
net.core.netdev_max_backlog = 65535

TIME_WAIT 소켓 관리

# TIME_WAIT 상태 소켓 수 확인
ss -s

# TIME_WAIT 빠른 재사용 활성화
net.ipv4.tcp_tw_reuse = 1

# 로컬 포트 범위 확장 (포트 고갈 방지)
net.ipv4.ip_local_port_range = 1024 65535

메모리 관리 튜닝

# /etc/sysctl.d/99-memory.conf

# 스왑 사용 최소화 (0~100, 낮을수록 RAM 우선 사용)
# SSD 서버: 1, 일반 서버: 10
vm.swappiness = 10

# 더티 페이지 쓰기 비율 (쓰기 집중 서버에서 낮춤)
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

# OOM Killer 조정 (데이터베이스 보호)
# /proc/PID/oom_score_adj 로 프로세스별 설정 가능
vm.overcommit_memory = 1
vm.overcommit_ratio = 80

파일 디스크립터 제한 해제

# 시스템 전체 파일 디스크립터 한계
fs.file-max = 2097152

# inotify 인스턴스 수 (Docker, 개발 환경)
fs.inotify.max_user_watches = 524288
fs.inotify.max_user_instances = 512

# /etc/security/limits.conf 에서 사용자별 제한 설정
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf

터미널 명령어 이미지

sysctl 명령으로 커널 파라미터를 조정하는 화면

웹 서버 최적화 설정

# /etc/sysctl.d/99-webserver.conf

# TCP Keep-Alive 설정
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 6

# SYN Flood 방어
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2

# ICMP 브로드캐스트 무시 (Smurf 공격 방어)
net.ipv4.icmp_echo_ignore_broadcasts = 1

# IP 스푸핑 방지
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

데이터베이스 서버 최적화

# /etc/sysctl.d/99-database.conf

# 공유 메모리 크기 (PostgreSQL, MySQL 대용량 버퍼)
kernel.shmmax = 68719476736   # 64GB
kernel.shmall = 4294967296

# 세마포어 설정 (동시 연결 수 관련)
kernel.sem = 250 32000 100 128

# 대용량 메모리 페이지
vm.nr_hugepages = 1024

설정 적용 및 확인

# 특정 설정 파일 적용
sysctl -p /etc/sysctl.d/99-network.conf

# 모든 sysctl.d 파일 적용
sysctl --system

# 현재 값과 설정 파일 비교
sysctl -a 2>/dev/null | grep somaxconn
cat /proc/sys/net/core/somaxconn

커널 파라미터 튜닝은 서버 성능에 큰 영향을 줄 수 있지만, 잘못된 값은 오히려 시스템 불안정을 초래할 수 있습니다. 변경 전 현재 값을 기록하고, 프로덕션 적용 전 충분한 테스트를 거치는 것을 권장합니다.

댓글남기기