리눅스 ulimit 명령어 사용법

2019. 4. 11. 13:51리눅스

ulimit : 커널단에서의 소프트웨어 및 하드웨어 한도 설정에 관련 된 명령어이다.

 

-- ulimit 사용 방법

ulimit [option] value

 

* 옵션 설명 *

-a : 모든 제한 사항을 보여준다.

-c : 최대 코어 파일 사이즈

-d : 프로세스 데이터 세그먼트의 최대 크기

-f  : shell에 의해 만들어질 수 있는 파일의 최대 크기

-s : 최대 스택 크기

-p : 파이프 크기

-n : 오픈 파일의 최대수

-u : 프로세스 최대수

-v : 최대 가상메모리의 량

 

-- 소프트웨어 한도 조회

ulimit -Sa

 

core file size          (blocks, -c) 0   è 코어파일의 최대크기

data seg size           (kbytes, -d) unlimited   è 프로세스의 데이타 세그먼트 최대크기

file size               (blocks, -f) unlimited   è 쉘에서 생성되는 파일일 최대크기   

pending signals                 (-i) 1024

max locked memory       (kbytes, -l) 32

max memory size         (kbytes, -m) unlimited   è resident set size의 최대크기(메모리 최대크기)      

open files                      (-n) 1024   è open file descriptors의 최대 숫자(열수있는 최대파일수)          

pipe size            (512 bytes, -p) 8   è 512-바이트 블럭의 파이프 크기              

POSIX message queues     (bytes, -q) 819200         

stack size              (kbytes, -s) 10240   è 프로세스의 스택 최대크기          

cpu time               (seconds, -t) unlimited   è 총 누적된 CPU시간()    

max user processes              (-u) 8190   è 단일 유저가 사용가능한 프로세스의 최대갯수           

virtual memory          (kbytes, -v) unlimited   è 쉘에서 사용가능한 가상 메모리의 최대용량     

file locks                      (-x) unlimited

 

-- 하드웨어 한도 조회

ulimit -Ha

 

core file size          (blocks, -c) 0   è 코어파일의 최대크기

data seg size           (kbytes, -d) unlimited   è 프로세스의 데이타 세그먼트 최대크기

file size               (blocks, -f) unlimited   è 쉘에서 생성되는 파일일 최대크기

pending signals                 (-i) 1024

max locked memory       (kbytes, -l) 32

max memory size         (kbytes, -m) unlimited   è resident set size의 최대크기 (메모리 최대크기)

open files                      (-n) 1024   è open file descriptors의 최대 숫자(열수있는 최대파일수)

pipe size            (512 bytes, -p) 8   è 512-바이트 블럭의 파이프 크기

POSIX message queues     (bytes, -q) 819200         

stack size              (kbytes, -s) 10240   è 프로세스의 스택 최대크기

cpu time               (seconds, -t) unlimited   è 총 누적된 CPU시간()

max user processes              (-u) 8190   è 단일 유저가 사용가능한 프로세스의 최대갯수

virtual memory          (kbytes, -v) unlimited   è 쉘에서 사용가능한 가상 메모리의 최대용량

file locks                      (-x) unlimited

 

-- open files 값을 변경

ulimit -Sn 65536 (소프트웨어 제한 값 변경)

ulimit -Hn 65536 (하드웨어 제한 값 변경)

 

만약 시스템 부팅 이후에도 변경 된 값의 유지를 원한다면

vi /etc/initscript

---------------------------

ulimit -Hn 65536

ulimit -Sn 65536

 

eval exec "$4"

---------------------------

 

 

Ulimit 설정 변경 (최대 오픈 가능한 파일수)

 

 

#ulimit -n 4096

 위명령어를 치면 최대 오픈 가능한 파일 갯수가 1024개에서 4096개로 변경된 것을 확인 할 수 있다.

 

 참고로 설정 가능한 값은 최대 : 63536 까지 지정이 가능하며 기본값은 1024 이다.

 

 

그런데..

 

ulimit 명령어를 통해 변경한 값은 재부팅을 하게 되면 사라지고 명령어를 입력한 세션에서만 적용이 된다.

 

Root에서 ulimit -n 4096을 입력하면 root 세션의 사용자만 4096으로 변경되어 있고 다른사용자로 로그인후 ulimit -a

 

명령어를 치면 1024로 표시되는것을 볼수 있다.

 

 

그래서 우리는 재부팅후에도 모든사용자에게 동일하게 파일갯수가 변경하도록 아래와 2개의 설정 파일을 변경하고

 

재부팅하도록 하자

 

 

 

#vi /etc/security/limits.conf    //아래의 4줄을 맨 마지막 줄에 추가

 

*        hard nofile 20000

 

*        soft nofile 20000

 

root        hard nofile 20000

 

root        soft nofile 20000

 

 

 

#vi /etc/pam.d/common-session  //아래의 1줄을 맨 마지막 줄에 추가

 

session required pam_limits.so

 

 

 

적용을 하기 위해서는 재부팅 reboot 이 필요함!

 

 

 

위의 설정을 잠시 설명하자면 /etc/security/limits.conf  파일내 *이 의미하는것은 root를 제외한 모든 사용자에게 적용한다는 의미이며 root가 제외되었으니 추가로 root에 대한 설정을 2줄 추가한 것이다.

 

뭐 귀찮다고 하면 그냉 저장해 놓고 붙여 넣기 해도 된다.

 

웹서버가 되었던 메일서버가 되었던 위 설정 누락으로 “Too many open files (24)” 메시지 보는 일은 없도록 하자