[linux] ulimit 설정 방법과 이해를 위한 완벽 가이드
ulimit 이란?
사용자가 시스템 리소스를 사용하는 한계를 설정하는 데 사용됩니다. 이 한계는 시스템의 안정성을 유지하고, 개별 사용자나 프로세스가 시스템 리소스를 과도하게 사용하는 것을 방지하는 데 도움이 됩니다.
ulimit 옵션
-a
: 현재 설정된 모든 limit를 보여줍니다.-n
: 열 수 있는 파일의 최대 수를 설정합니다.-u
: 사용자 프로세스의 최대 개수를 설정합니다.-m
: 최대 resident set size를 설정합니다.
소프트 설정과 하드 설정
ulimit 에서 설정할 수 있는 타입에는 두 가지가 있습니다. 바로 soft
와 hard
설정입니다.
소프트 limit 역시 리소스를 제한하는 최대값 입니다. 어떤 유저가 할당된 제한 값 이상의 리소스를 사용할 수는 없습니다.
소프트 값은 0과 하드 limit 사이의 값을 가질 수 있습니다. (0 <= soft limit <= hard limit)
즉, 하드 limit은 소프트 limit들의 최대값 역할을 합니다.
하드 limit 은 root 사용자만 값을 증가시킬 수 있습니다.
ulimit -a (soft limit )
ulimit -a
명령어는 리눅스 시스템에서 현재 사용자의 리소스 제한 정보를 보여주는 명령어입니다. 이 명령어를 사용하면 현재 사용자의 제한된 자원에 대한 정보를 확인할 수 있습니다.
예제 코드:
$ ulimit -a
결과예시
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 65536
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) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
ulimit -aH ( hard limit)
ulimit -aH
명령어는 ulimit -a
와 동일한 기능을 수행하지만, 하드 제한(hard limit)에 대한 정보를 보여줍니다. 하드 제한은 시스템 관리자가 설정한 최대 제한 값으로, 사용자는 이 값을 초과할 수 없습니다.
예제 코드:
$ ulimit -aH
결과계시
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 65536
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) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
위의 예제 코드와 결과에서 볼 수 있듯이 ulimit -a와 ulimit -aH 명령어는 현재 사용자의 리소스 제한 정보를 보여주는데 사용됩니다. 이를 통해 사용자는 자원 제한에 대한 정보를 확인하고 필요에 따라 수정할 수 있습니다.
ulimit 주요 옵션
-a : 모든 제한 값 출력 -b : 최대 소켓 버퍼 크기 제한 -d : 프로세스의 데이터 세그먼트 최대 크기 제한 -e : 최대 우선 예약 순위
-f : 쉘에 의해 생성된 파일의 최대 크기 제한
-i : 보류중인 신호의 최대 수 제한
-l : 메모리에 잠길 수 있는 최대 크기 제한
-s : stack 최대 크기 제한
-t : CPU의 초당 사용시간 제한
-m : 메모리에 상주 가능한 최대 크기 제한
-c : core파일이 생성될때의 최대 크기 제한
-u : 특정 사용자의 사용가능한 프로세스의 최대갯수 제한
-v : 쉘이 사용할 수 있는 가상 메모리의 최대 크기 제한
-p : 512 byte 블록으로 파이프 크기를 설정
-q : POSIX 메시지 대기 행렬의 최대 byte 수 제한
-r : 최대 실시간 스케줄링 우선 순위
-n : 오픈가능한 FD의 갯수 제한 (too many open file 등의 Error가 발생하는 경우 해당 값을 수정하여 해결 가능)
-x : 최대 파일 잠금 수 제한
-S : 주어진 자원에 대한 소프트 한도 설정
-H : 주어진 자원에 대한 하드 한계 설정
-T : 최대 스레드 수 제한
값 확인
-
core file size : 코어파일의 최대 크기 (-c 옵션)
-
data seg size : 프로세스의 데이터 세그먼트 최대 크기 (-d 옵션)
-
scheduling priority : 쉘에서 생성되는 파일의 최대 크기 (-e 옵션)
-
file size : 파일의 최대 크기 (-f 옵션)
-
pending signals : 보류중인 신호 제한 (-i 옵션)
-
max locked memory : 메모리에 잠길 수 있는 최대 크기 (-l 옵션)
-
max memory size : resident set size의 최대 크기 (메모리 최대크기로 -m 옵션)
-
open files : 한 프로세스에서 열 수 있는 open file descriptor의 최대 수 (열수 있는 최대 파일 수로 -n 옵션)
-
pipe size : 512 byte 블록의 파이프 크기 (-p 옵션)
-
POSIX message queues : POSIX 메시지 대기 행렬의 최대 byte 수 (-q 옵션)
-
real-time priority : 최대 실시간 스케줄링 우선 순위 (-r 옵션)
-
stack size : stack 최대 크기 (-s 옵션)
-
cpu time : 총 누적된 CPU 시간[초] (-t 옵션)
-
max user processes : 단일 유저가 사용가능한 프로세스의 최대 갯수 (-u 옵션)
-
virtual memory : 쉘에서 사용가능 한 가상 메모리의 최대 용량 (-v 옵션)
-
file locks : 최대 잠금 파일 수 (-x 옵션)
댓글남기기