강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

ulimit 실무3편: ulimit을 이용한 여러가지 시스템 자원사용 제한 설정하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

ulimit 실무3편: ulimit을 이용한 여러가지 시스템 자원사용 제한 설정하기

 

 

 

 

 

첫번째 예로서 stack의 최대 크기를 제한하는 설정을 해보도록 하겠다.

 

 

 

 (SHELL)과 사용자 프로세스(user processes)에 대한 시스템 자원사용을 제한하는 ulimit명령어 사용시에 -s옵션을 사용하면 스택의 최대크기(stack size)를 제한할 수 있다.

 

 

 

 다음은 스택의 크기를 4096으로 제한하고 그 결과를 확인한 것이다.

 

 

 

 

 

[root@RockyLinux01 /]# ulimit -s 4096

[root@RockyLinux01 /]#

[root@RockyLinux01 /]# ulimit -a | grep stack

stack size                  (kbytes, -s) 4096

[root@RockyLinux01 /]#

 

 

 

위의 “ulimit -a | grep stack”의 결과에서 “stack size”의 값이 4096으로 설정되어 있음을 확인하기 바란다.

 

 

 

 

 

두번째 CPU의 초당 사용시간을 제한하는 설정을 해보자. (SHELL)과 사용자 프로세스(user processes)에 대한 시스템 자원사용을 제한하는 ulimit명령어 사용시에 -t옵션을 사용하면 초(second)당 사용 가능한 CPU사용의 최대시간(cpu time)을 초단위로 설정할 수 있다.

 

 

 

 다음은 초당 사용 가능한 CPU의 최대시간을 10으로 설정하고 그 결과를 확인한 것이다.

 

 

 

 

 

[root@RockyLinux01 /]# ulimit -t 10

[root@RockyLinux01 /]#

[root@RockyLinux01 /]# ulimit -a | grep cpu

cpu time                   (seconds, -t) 10

[root@RockyLinux01 /]#

 

 

 

 

위의 “ulimit -a | grep cpu”의 결과에서 “cpu time”의 값이 10으로 설정되어 있음을확인할 수 있다.

 

 

 

 

 

세번째로 메모리에 상주가능한 최대크기를 제한하는 설정을 해보자. (SHELL)과 사용자 프로세스(user processes)에 대한 시스템 자원사용을 제한하는 ulimit명령어 사용시에 -m옵션을 사용하면 메모리에 상주할 수 있는 최대크기(resident set size)를 제한할 수 있다.

 

 

 

 

 

다음은 메모리에 상주할 수 있는 최대크기를 5000(kbytes)로 설정하고 그 결과를 확인한 것이다.

 

 

 

 

 

[root@RockyLinux01 /]# ulimit -m 5000

[root@RockyLinux01 /]#

[root@RockyLinux01 /]# ulimit -a | grep memory

max locked memory           (kbytes, -l) 64

max memory size             (kbytes, -m) 5000

virtual memory              (kbytes, -v) unlimited

[root@RockyLinux01 /]#

 

 

 

 

위의 “ulimit -a | grep memory”의 결과에서 “max memory size”의 값이 5000kbyte로 설정되어 있음을 확인할 수 있다.

 

 

 

 

 

네번째 예로서 core파일의 생성될 때에 그 용량을 제한하는 설정을 해보도록 하자. 코어(core)파일이란 실행된 프로세스나 프로그램이 충돌할 때에 발생하는 메모리의 실제내용을 덤프(dump)한 자동생성파일이다.

 

 

 

, 이 파일에는 문제가 발생한 시스템의 메모리내용이 그대로 저장되어 있기 때문에 전문 SE(System Engineer)들은 시스템의 이상원인을 밝혀내기 위하여 core파일을 분석한다.

 

 

 

(SHELL)과 사용자의 프로세스에 대한 시스템 자원사용을 제한하는 ulimit명령어 사용시에 -c옵션을 사용하면 이러한 코어파일(core file)의 최대 크기(size)를 제한하거나 아예 코어파일이 생성되지 않게 설정할 수 있다.

 

 

 

 따라서 시스템관리자는 이런 코어파일에 대한 다음과 같이 설정할 수 있어야 한다.

 

 

 

 

 

다음은 코어파일(core file)의 최대 크기를 2,000,000블록(block)으로 제한하고 제한된 사항을 확인한 예이다.

 

 

 

 

 

[root@RockyLinux01 /]# ulimit -c 2000000

[root@RockyLinux01 /]#

[root@RockyLinux01 /]# ulimit -a | grep core

core file size              (blocks, -c) 2000000

[root@RockyLinux01 /]#

 

 

 

 

위의 “ulimit -a | grep core”의 결과에서 “core file size”의 값이 2000000으로 설정되어 있다는 것을 확인하기 바란다.

 

 

 

 

 

다섯번째로 바로 앞에서 ulimit설정은 코어파일의 생성크기를 제한하는 설정이었고 이번에는 코어파일이 아예 생성되지 않도록하는 설정이다.

 

 

 

 , 코어파일이 아예 생성되지 않도록 하는 방법이다.

 

 

 

 

 

아래 예와 같이 -c옵션 다음에 0을 주면 core파일의 크기를 0으로 제한하는 설정이다.

 

 

 

 이것은 결론적으로 core파일이 생성되지 못하게 하는 것과 같다.

 

 

 

 

 

[root@RockyLinux01 /]# ulimit -c 0

[root@RockyLinux01 /]#

[root@RockyLinux01 /]# ulimit -a | grep core

core file size              (blocks, -c) 0

[root@RockyLinux01 /]#

 

 

 

 

 

하지만 위와 같이 설정되어 있다면 현재 시스템이 운용되는 동안에는 유효하겠지만 재부팅되고 나면 원래 기본값으로 돌아간다.

 

 

 

 따라서 재부팅후에도 지속적으로 이 값이 적용되도록 하기 위해서는 다음과 같이 각 계정사용자의 홈디렉토리에 있는 .bash_profile이라는 파일을 다음과 같이 설정하면 된다.

 

 

 

 

 

, 모든 계정들은 로그인할 때에 자기자신의 홈디렉토리내에 있는 .bash_profile파일을 읽어서 자기자신만의 시스템 사용환경을 설정한다.

 

 

 

 이 때에 다음과 같이 설정해두면 해당 사용자는 코어(core)파일을 재부팅한 이후에도 지속적으로 생성하지 못하게 된다.

 

 

 

 

 

[root@RockyLinux01 ~]# ls -l /root/.bash_profile

-rw-r--r-- 1 root root 152  6 23 14:09 /root/.bash_profile

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# cat /root/.bash_profile

# .bash_profile

 

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi

 

# User specific environment and startup programs

ulimit c 0

[root@RockyLinux01 ~]#

 

 

 

 

위의 예는 root사용자의 홈디렉토리에 있는 .bash_profile의 내용이다.

 

 

 

 내용을 보면 마지막 행에 “ulimit -c 0”이라는 설정이 있다.

 

 

 

 root사용자가 로그인할 때마다 실행되어 이를 적용하게 된다.

 

 

 

  

 

여섯번째 예로서 특정사용자의 사용가능한 프로세스의 최대갯수를 ulimit으로 제한하는 예이다.

 

 

 

 (SHELL)과 사용자 프로세스(user processes)에 대한 시스템 자원사용을 제한하는 ulimit명령어 사용시에 -u옵션을 사용하면 한 사용자에 의해 생성되는 프로세스의 최대개수를 제한할 수 있다.

 

 

 

 다음은 한 사용자에 의해 생성되어질 수 있는 프로세스의 최대개수를 500개로 제한하고 이를 확인한 예이다.

 

 

 

 

 

[root@RockyLinux01 ~]# ulimit -u 500

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# ulimit -a | grep processes

max user processes                  (-u) 500

[root@RockyLinux01 ~]#

 

 

 

 

위의 “ulimit -a | grep processes”의 결과에서 “max user processes”의 값이 500으로설정되어 있음을  확인하기 바란다.

 

 

 

 

 

 

일곱번째 예로서 쉘이 사용할 수 있는 가상메모리의 최대량을 ulimit으로 제한하는 설정이다.

 

 

 

 (SHELL)과 사용자 프로세스(user processes)에 대한 시스템 자원사용을 제한하는 ulimit명령어 사용시에 -v옵션을 사용하면 쉘이 사용할 수 있는 가상메모리(virtual memory)의 최대량을 제한할 수 있다.

 

 

 

 다음은 쉘이 사용할 수 있는 가상메모리의 최대크기를 300000(kbytes)로 제한하고 그 결과를 확인한 예이다.

 

 

 

 

 

[root@RockyLinux01 ~]# ulimit -v 300000

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# ulimit -a | grep virtual

virtual memory              (kbytes, -v) 300000

[root@RockyLinux01 ~]#

 

 

 

 

위의 “ulimit -a | grep virtual”의 결과에서 “virtual memory”의 값이 300000으로 설정되어 있음을  확인하기 바란다.

 

 

 

 

 

마지막 예로서 오픈가능한 FD(File Descriptor)의 개수를 ulimit으로 제한하는 설정을 해보도록 하자. (SHELL)과 사용자 프로세스(user processes)에 대한 시스템 자원사용을 제한하는 ulimit명령어 사용시에 -n옵션을 사용하면 오픈 가능한 파일기술자(FD : file descriptor)의 최대 개수를 제한할 수 있다.

 

 

 

 , 다음은 오픈 가능한 파일기술자(FD)의 최대 개수를 4096개로 제한하고 그 결과를 확인한 예이다.

 

 

 

 참고로 매뉴얼(man page)를 보면 대부분의 리눅스시스템에서는 이 값을 설정하는 것을 허용하지 않는다.

 

 

 

 사용할 수 있는 파일의 개수를 인위적으로 설정한다는 것은 시스템 효율성측면에서 권할만한 것은 아니기 때문이다.

 

 

 

 참고로 리눅스 커널옵션값을 보관하고 있는 /proc파일시스템에 보면 최대 오픈가능한 파일의 개수들을 정의하고 있다.

 

 

 

 

 

[root@RockyLinux01 ~]# ulimit -n 4096

[root@RockyLinux01 ~]#

[root@RockyLinux01 ~]# ulimit -a | grep files

open files                          (-n) 4096

[root@RockyLinux01 ~]#

 

 

 

 

위의 “ulimit -a | grep files”의 결과에서 “open files”의 값이 4096으로 설정되어 있음을 확인하기 바란다.

 

 

 

 

 

이상으로 시스템 자원사용을 제한하는 ulimit의 여러가지 예들을 보았다.

 

 

 

 이 외에도 -p옵션을 사용하면 512바이트 블록단위로 파이프크기(pipe size)를 설정 할 수 있으며 -d옵션을 사용하면 프로세스 데이터세그먼트(process data segment)의 최대크기를 제한할 수도 있다.

 

 

 

 여러분들의 활용여하에 따라서 무용지물이 되기도 하고 멋진 칼이되기도 한다. 알고 모르고는 배우는 것으로 해결할 수 있지만, 알게된 것을 실무에 적용하는 행동은 여러분들의 몫임에 틀림없다. 행운을 빈다. ^^

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,057 명
  • 현재 강좌수 :  35,930 개
  • 현재 접속자 :  259 명