linux의 ulimit 명령은 프로세스의 자원 한도를 설정하는 명령어 입니다.

보여 주는 형식은 Linux 또는 커널 버전 마다 다르지만 보여주는 내용은 비슷 합니다.

제한 설정은 soft 또는 hard로 나누어 집니다.

soft : 프로그램을 새로 시작하면 기본으로 적용되는 제한. hard : soft에서 설정할 수 있는 최대 제한.

CentOS or Ubuntu 20.x LTS

$> ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3560
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3560
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Mint or Ubuntu 18.x LTS

$> ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-m: resident set size (kbytes)      unlimited
-u: processes                       63465
-n: file descriptors                1024
-l: locked-in-memory size (kbytes)  64
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 63465
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 0
-N 15:                              unlimited

옵션

  • -a : 모든 제한 값 출력
  • -t cpu time (seconds) : CPU의 초당 사용시간
  • -f file size (blocks) : 쉘에 의해 생성된 파일의 최대 크기
  • -d data seg size (kbytes) : 프로세스의 데이터 세그먼트 최대 크기
  • -s stack size (kbytes) : 스택 최대 크기
  • -c core file size (blocks) : core 파일이 생성될 때 최대 크기
  • -m resident set size (kbytes) : 메모리에 상주 가능한 최대 크기
  • -u processes : 특정 사용자의 사용가능한 프로세스의 최대 개수
  • -n file descriptors : 오픈가능한 FD의 개수
    • too many open file 에러 발생시 해당 값을 조절 할 수 있습니다.
  • -l locked-in-memory size (kbytes) : 메모리에 잠길 수 있는 최대 크기
  • -v address space (kbytes) : 쉘이 사용할 수 있는 가상 메모리 최대 크기
  • -x file locks : 최대 파일 잠금 수
  • -i pending signals : 보류중인 signal의 최대 수
  • -q bytes in POSIX msg queues : POSIX 메시지 대기 큐의 최대 byte 수
  • -e max nice, scheduling priority : 최대 우선 예약 순위
  • -r max rt priority, real-time priority : 최대 실시간 스케줄링 우선 순위
  • -p pipe size : 512 byte 블럭으로 파이프 크기를 설정
  • -N 15

설정

  • ulimit 명령어를 통한 설정
$> ulimit -n
1024
$> ulimit -n 2048
2048

명령어를 통한 설정은 해당 세션에서만 유요합니다.

  • /etc/security/limits.conf 파일을 통해 user 별로 영구적인 설정이 가능합니다.
#<domain>      <type>  <item>         <value>
geeksaga       soft    nofile          2048
geeksaga       hard    nofile          2048
  • /etc/profile를 통해 로그인 한 세션에 대한 설정을 할 수 있습니다.
$> vi /etc/profile
...
# ulimit setting
ulimt -n 2048     # open files
...
$> source /etc/profile

tldr ulimit

$> tldr ulimit

  ulimit

  Get and set user limits.

  - Get the properties of all the user limits:
    ulimit -a

  - Get hard limit for the number of simultaneously opened files:
    ulimit -H -n

  - Get soft limit for the number of simultaneously opened files:
    ulimit -S -n

  - Set max per-user process limit:
    ulimit -u 30

참고 링크