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