1. ulimit 명령어?
프로세스들에 대한 시스템자원 사용을 제한할 수 있도록 하는 것이다.

2. ulimit 명령어로 설정 가능한 시스템 자원 제한 사항
1) 코어(core)파일 생성시 최대 크기 제한
2) 쉘에 의해 만들어질 수 있는 파일의 최대 크기 제한
3) 한 사용자에게 허용 가능한 프로세스(user processes)의 최대 개수 제한
4) 쉘에 허용 가능한 가상메모리(virtural memory)의 최대량 제한
5) 오픈할 수 있는 파일기술자(FD : file descriptor)의 최대 개수 제한
6) 스택크기(stack size)의 최대크기 제한
7) 초당 사용 가능한 CPU의 최대 허용 시간(cpu time) 제한
8) 메모리에 상주(resident set size)할 수 있는 최대 크기 제한
9) 512byte 블록단위로 파이프크기(pipe size) 설정
10) 프로세스 데이터세그먼트(process data segment)의 최대 크기 제한

3. ulimit 명령어 활용
1) 현재 로그인한 사용자의 자원 제한 사항 보기 : -a
2) hard limit 값 보기 : -Ha
3) sort limit 값 보기 : -Sa
4) -s : statck 최대 크기 제한
5) -t : cpu의 초당 사용시간 제한
6) -m : 메모리에 상주 가능한 최대 크기 제한
7) -c : core파일이 생성될때의 최대 크기 제한
8) -u : 특정 사용자의 사용가능한 프로세스의 최대갯수 제한 :
9) -v : 쉘이 사용할수 있는 가상 메모리의 최대크기 제한
10)-n : 오픈가능한 FD의 갯수 제한
        too many open files 등의 에러가 발생하는 경우 값을 수정하여 해결할 수 있다.
        해당 블로그의 "Too many open files 에러 - 커널 파라미터 file-max 조정"도 참고 하기 바람.

- 명령어를 이용하여 값을 수정할 경우 재부팅시에는 값이 초기화 되기 때문에 설정을 유지하고 싶다면
  /etc/security/limits.conf 파일을 수정하여 적용 할 수 있다.
예) kim 계정의 open file 갯수를 100으로 제한.
예) mysql 계정의 open file 갯수를 soft, hard 모두 1000으로 제한

[root@mhkim]# vi /etc/security/limits.conf
--------------------------------------------------------------------------------------------------------------------------------------------------------------

#<domain>      <type>  <item>         <value>
 #

 #*                    soft    core            0
 #*                    hard    rss             10000
 #@student        hard    nproc           20
 #@faculty          soft    nproc           20
 #@faculty          hard    nproc           50
 #ftp                  hard    nproc           0
 #@student          -       maxlogins       4

kim             soft    nofile          100
mysql          -       nofile          1000

 # End of file
--------------------------------------------------------------------------------------------------------------------------------------------------------------
[root@mhkim]# su - kim
[kim@mhkim ~]$
[kim@mhkim ~]$ 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) 16384
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 100
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 20480
cpu time               (seconds, -t) unlimited
max user processes              (-u) 32768
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

* 아규먼트 설명
Domain : 특정 사용자명이나 그룹명 등으로 지정할 수 있고, wildcard 문자(*)을 사용하여 전체 사용자를 지정할 수 있다.
Type : hard로 설정하면 superuser 와 커널에 의해 설정이 되게 하며, user는 설정된 값 이하로만 변경이 가능하다.
         soft 옵션: soft로 설정한 값은 user가 얼마든지 설정값을 변경 가능하다.
Item : 여러 가지 설정이 있으며, 이 중에 아래 두가지에 대해서 설명한다.
nofile : 파일 오픈 최대 개수, 기본값은 1024이다.
nproc : 프로세스 생성 최대 개수(리눅스에서는 Java 쓰레드도 프로세스로 인식된다.) 이 값은 아무리 크게 잡아도 커널 내부에서 시스템의 사양에 따라 정한 최대값 이상을 넘지 않도록 설정되어 있다. Unlimited로 설정한다.

4. MongoDB 운용시 권장 ulimit 값.
-f (file size): unlimited
-t (cpu time): unlimited
-v (virtual memory): unlimited
-n (open files): 64000
-m (memory size): unlimited
-u (processes/threads): 32000

ulimit 을 통한 시스템 자원 사용 제한

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다