우분투 실전 명령어 | 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 문서