Linux 개념 | ulimit 사용 가이드: soft/hard, nofile, nproc 쉽게 정리
본문 바로가기

Linux

Linux 개념 | ulimit 사용 가이드: soft/hard, nofile, nproc 쉽게 정리

728x90
반응형

서버 운영하다 보면 가끔 마주치는 명령어가 있습니다.
바로 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에는 항상 softhard라는 두 가지 한도가 존재합니다.

  • 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 공격에 대한 자원 방어선이 약해질 수 있으므로 적정선을 잡는 것이 중요합니다.

728x90
반응형