서버 운영하다 보면 가끔 마주치는 명령어가 있습니다.
바로 ulimit 입니다.
멀쩡하게 서비스 돌리던 중에 느닷없이 Too many open files 같은 메시지가 뜨면, 그때서야 이 명령을 찾게 되곤 하죠.
이번 글에서는 ulimit이 무엇인지, soft/hard 한도의 차이는 무엇인지,
그리고 자주 보이는 nofile, nproc 같은 항목이 무엇을 의미하는지 간단하게 정리해봅니다.
1. ulimit이란?
ulimit은 리눅스에서 사용자 또는 프로세스가 사용할 수 있는 자원 한도(Resource Limit)를 확인하거나
변경할 수 있는 명령어입니다.
이 한도에는 다음과 같은 것이 포함됩니다.
- 파일 디스크립터 개수 (nofile)
- 프로세스/스레드 개수 (nproc)
- 코어 덤프 크기 (core)
- 스택 크기 (stack)
- 메모리 잠금 용량 (memlock)
이런 제한들은 서버가 자원을 무한히 소모하지 않도록 보호하기 위한 안전장치입니다.
2. soft limit vs hard limit
ulimit에는 항상 soft와 hard라는 두 가지 한도가 존재합니다.
- soft: 현재 세션이 기본적으로 사용하는 한도
- hard: 절대 초과할 수 없는 상한 (보안·자원 보호용)
쉽게 말해:
soft = 일상 허용선
hard = 넘지 말아야 할 벽
soft는 hard의 범위 내에서 증가시킬 수 있지만,
hard를 변경하려면 root 권한이 필요합니다.
3. 주요 항목 의미 정리
3-1. nofile
nofile은 한 프로세스가 동시에 열 수 있는 파일 디스크립터 개수를 의미합니다.
여기에는 파일뿐 아니라 소켓도 포함되므로
웹 서버, DB, 로그 수집기(Splunk, Kafka 등)에서 매우 중요한 값입니다.
$ ulimit -n
1024
기본값이 1024인 경우가 많아 대규모 연결 처리에는 부족할 수 있습니다.
3-2. nproc
nproc은 사용자 또는 프로세스가 생성할 수 있는 스레드/프로세스 개수입니다. Java 기반 서비스(JVM), DB, 브로커 등에서 중요하게 작용합니다.
$ ulimit -u
4096
4. 사용 예시
현재 리소스 제한 확인:
$ ulimit -a
특정 항목만 확인:
$ ulimit -n # nofile
$ ulimit -u # nproc
5. 설정 파일 위치
시스템 단위 설정은 다음 파일에서 조정합니다:
/etc/security/limits.conf
/etc/security/limits.d/*.conf
예시:
root soft nofile 100000
root hard nofile 100000
splunk soft nproc 100000
splunk hard nproc 100000
systemd 기반 서비스는 서비스 단에서 별도 제한이 있을 수 있습니다:
$ systemctl show <서비스> | grep LimitNOFILE
6. 왜 중요한가?
설정이 부족하면 다음과 같은 문제가 발생할 수 있습니다:
Too many open files에러- 웹 서버 502/504 응답
- DB 커넥션 실패
- 로그/메시지 큐 드롭
반대로 너무 높게 설정하면 DoS 공격에 대한 자원 방어선이 약해질 수 있으므로 적정선을 잡는 것이 중요합니다.
'Linux' 카테고리의 다른 글
| Linux 개념 | ulimit의 역사 : nproc 값을 왜 제한했었고, 왜 이제는 unlimited인가? (0) | 2026.01.25 |
|---|---|
| Linux 개념 | Amazon Linux 2023과 유사한 OS는 무엇인가? — 운영 모델 관점에서 비교해보기 (1) | 2026.01.25 |
| Linux 개념 | 파일 디스크립터(File Descriptor, FD) 확인 법 (0) | 2026.01.25 |
| Linux 개념 | 파일 디스크립터(File Descriptor, FD)란? (0) | 2026.01.25 |
| [ Rocky Linux ] Rocky Linux 9.0 OS 다운로드 및 설치 (0) | 2024.07.17 |