우분투 실전 명령어 | sysctl로 커널 파라미터 즉시/영구 적용

운영 중인 서버에서 네트워크 큐 길이, 파일 디스크립터, 메모리 동작 같은 커널 파라미터를 바로 조정해야 할 때가 있습니다. sysctl을 쓰면 재부팅 없이 즉시 적용하고, 필요한 값은 영구 설정으로 관리할 수 있습니다.

언제 쓰는가

  • 트래픽 급증으로 소켓 큐나 커널 제한값을 점검해야 할 때
  • 애플리케이션이 too many open files 같은 시스템 한계에 자주 걸릴 때
  • 성능 튜닝 전후로 커널 파라미터를 비교하고 기록해야 할 때

바로 쓰는 명령어

# 현재 값 확인
sysctl net.core.somaxconn
sysctl fs.file-max
# 런타임 즉시 적용(재부팅 시 원복 가능)
sudo sysctl -w net.core.somaxconn=4096
sudo sysctl -w vm.swappiness=10
# 영구 적용 파일 작성 후 반영
sudo tee /etc/sysctl.d/99-app-tuning.conf >/dev/null <<'EOF'
net.core.somaxconn = 4096
vm.swappiness = 10
fs.inotify.max_user_watches = 524288
EOF

sudo sysctl --system

핵심 옵션/패턴

  • sysctl key는 현재 커널 값을 읽는 가장 빠른 방법입니다.
  • sysctl -w key=value는 즉시 반영되지만 재부팅 이후 유지되지 않을 수 있습니다.
  • 운영에서는 /etc/sysctl.d/*.conf 파일로 값을 관리하고 sysctl --system으로 일괄 반영하는 패턴이 안전합니다.
  • 튜닝 전에는 기본값을 텍스트로 백업해 두면 롤백이 쉬워집니다.
# 변경 전 백업
sysctl -a 2>/dev/null | grep -E 'somaxconn|swappiness|max_user_watches' > /tmp/sysctl-before.txt

# 변경 후 비교
sysctl -a 2>/dev/null | grep -E 'somaxconn|swappiness|max_user_watches' > /tmp/sysctl-after.txt
diff -u /tmp/sysctl-before.txt /tmp/sysctl-after.txt

명령 출력 예시

$ sysctl net.core.somaxconn
net.core.somaxconn = 128

$ sudo sysctl -w net.core.somaxconn=4096
net.core.somaxconn = 4096
$ sudo sysctl --system
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /etc/sysctl.d/99-app-tuning.conf ...
net.core.somaxconn = 4096
vm.swappiness = 10
fs.inotify.max_user_watches = 524288

자주 하는 실수

  • -w로 적용하고 끝내서 재부팅 후 값이 원래대로 돌아오는 경우가 많습니다. 영구 적용 파일까지 반드시 남기세요.
  • 한 번에 너무 많은 값을 바꿔서 원인 추적이 어려워집니다. 서비스 영향이 큰 항목은 1~2개씩 나눠서 반영하세요.
  • 문서에서 본 값을 그대로 복사해 환경 차이를 무시하면 오히려 성능이 떨어질 수 있습니다. 워크로드 기준으로 검증해야 합니다.

검증 방법

  • 설정 파일 문법 이상 여부와 실제 반영값을 함께 확인
  • 서비스 지표(지연, 에러율, 큐 적체) 전후 비교
  • 재부팅 이후에도 값이 유지되는지 확인
# 반영값 확인
sysctl net.core.somaxconn vm.swappiness fs.inotify.max_user_watches

# 재부팅 후에도 유지되는지 확인용
sudo reboot
# 재접속 후
sysctl net.core.somaxconn vm.swappiness fs.inotify.max_user_watches

운영 팁

  • sysctl 튜닝은 애플리케이션 설정, ulimit, systemd 리소스 제한과 함께 봐야 효과가 납니다.
  • 변경 이력을 남기기 위해 /etc/sysctl.d/99-app-tuning.conf를 형상관리하거나 etckeeper와 같이 운영하면 추적이 편합니다.
  • 장애 시간대에는 즉시 복구가 우선이므로, 현재 값 저장 후 최소 변경만 적용하는 습관이 안전합니다.

출처

  • Linux man-pages 프로젝트
  • Ubuntu Server Guide
  • kernel.org 문서