OS Linux[centos,RHEL]/process 관리 이해

ulimit

infra 2021. 10. 31. 19:23

shell과 shell이 실행한 프로세스에 대하여 시스템 상의 사용 자원을 제한할 수 있도록 해주는 명령어.

 

종류는 2가지가 있는데 Hard limit vs Soft Limit이다.

1)hard limit : soft limit에서 최대로 늘릴 수 있는 한도이며, 슈퍼유저(즉, root)에 의해서 조정이 가능함.

2)soft limit : 새로운 프로세스가 생성되면 기본적으로 적용되는 제한값이다.

 

 

 

#man ulimit으로 해당 옵션과 내용을 확인 할 수 있다.

 

더보기

ulimit [-HSTabcdefilmnpqrstuvx [limit]]


              Provides  control  over  the  resources  available to the shell and to processes started by it, on systems that allow such control.  

 

The -H and -S options
              specify that the hard or soft limit is set for the given resource.  A hard limit cannot be increased by a non-root user once it is set; a soft  limit  may
              be  increased  up  to the value of the hard limit.  If neither -H nor -S is specified, both the soft and hard limits are set.  The value of limit can be a
              number in the unit specified for the resource or one of the special values hard, soft, or unlimited, which stand for the current hard limit,  the  current
              soft  limit,  and  no  limit,  respectively.  If limit is omitted, the current value of the soft limit of the resource is printed, unless the -H option is
              given.  When more than one resource is specified, the limit name and unit are printed before the value.  Other options are interpreted as follows:


              -a     All current limits are reported
              -b     The maximum socket buffer size
              -c     The maximum size of core files created    
              -d     The maximum size of a process's data segment
              -e     The maximum scheduling priority ("nice")
              -f     The maximum size of files written by the shell and its children
              -i     The maximum number of pending signals
              -l     The maximum size that may be locked into memory
              -m     The maximum resident set size (many systems do not honor this limit)
              -n     The maximum number of open file descriptors (most systems do not allow this value to be set)
              -p     The pipe size in 512-byte blocks (this may not be set)
              -q     The maximum number of bytes in POSIX message queues
              -r     The maximum real-time scheduling priority
              -s     The maximum stack size
              -t     The maximum amount of cpu time in seconds
              -u     The maximum number of processes available to a single user
              -v     The maximum amount of virtual memory available to the shell and, on some systems, to its children
              -x     The maximum number of file locks
              -T     The maximum number of threads

 

각 계정의 사용자(User)가 사용가능한 자원의 제한 (limit)값

 

[test2@centos7 ~]$ ulimit -a
core file size          (blocks, -c) 0                //core file의 크기    : c 옵션

                                                          //현재 상태  0 이면 core 파일이 생성되지 않도록 함
data seg size           (kbytes, -d) unlimited   //process의 data segment 크기  : d옵션
scheduling priority             (-e) 0               //shell에서 생성되는 파일의 최대 크기  :e 옵션
file size               (blocks, -f) unlimited
pending signals                 (-i) 7206
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited   // resident set size 의 최대크기(즉,메모리 최대크기)   :m 옵션
open files                      (-n) 1024             //한개의 process에서 열 수 있는 open file descriptor(fd)의 최대숫자                                                           즉, 열 수 있는 최대 파일의 수를 의미 : n옵션
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          //총 누적된 CPU의 초(second) 단위의 시간 : -t
max user processes              (-u) 4096              //단일 user가 사용가능한 프로세스의 갯수
virtual memory          (kbytes, -v) unlimited        //shell에서 사용가능한 가상메모리의 최대 크기 -v
file locks                      (-x) unlimited     

 

 

 

각 계정의 사용자(User)가 사용가능한 자원의 제한(limit)값

root, test1,test2의 값이7206, 4096 ,4096인 이유는 /etc/security/limits.d/20-nproc.conf와 관련있다. root는 최대치가 7206이지만, 이게 최대 무제한 값이라는 것이다.

하지만 root이외에는 4096

 

각 줄의 구조를 파악하다 보면 ulimit의 옵션값이 (blocks, -c) ,(kbytes, -d)   (-e) , (-n).. 등등의 옵션값 확인 및 수정할 수 있다.

 

<ulimit 각 항목에 대한 설명>

 

 

 Item Description 
core file size core 파일 생성 시 최대 크기 제한. 이 값이 0 이면 core 파일이 생성되지 않도록 함
data seg size 프로세스 데이터 세그먼트의 최대 크기 제한. 프로세스가 heap에 할당할 수 있는 최대 메모리량
scheduling priority the maximum scheduling priorty ("nice")
- nice는 Unix와 Linux 같은 Unix 계통의 OS에서 찾을 수 있는 명령어
- nice는 같은 이름의 커널 콜에 직접 맵핑되어 있음
- 주어진 프로세스의 우선권은 nice가 커널 스케줄러 안에서 변경
- -20의 niceness는 가장 높은 우선권이고, 19는 가장 낮은 우선 순위 (/etc/security/limits.conf 에 내용)
- 기본 niceness는 부모 프로세스에서 물려받으며 보통 0
- renice 명령어도 있음. 이것은 프로세스가 실행중일 때 우선순위를 바꾸는데 사용
file size shell에 의해 만들어질 수 있는 파일의 최대 크기 제한. 소켓 포함
pending signals * Signal: 시스템이 어떤 조건에 의해 event가 발생했음을 알리기 위해 프로세스에게 전달되는 software interrupt. Signal을 통해 프로세스 간 event를 전달하여 통신수단으로 이용 가능. 프로세스는 동시에 하나의 Signal만을 처리 가능
* Pending Signal: 생성은 되었으나 아직 전달되지 않은 Signal. 프로세스가 특정 Signal을 block 시키면 Signal은 pending 되며, block된 Signal은 프로세스가 그 Signal을 unblock 할 때까지 pending되거나 또는 해당 Signal에 대한 처리를 ignore로 변경할 때까지 pending 됨
max locked memory - the maximum number of bytes of memory that may be locked into RAM
- this parameter limits the maximum amount of memory that can be "locked down" to a specific address in physical memory by a given process.
- If the physical memory used for the database is locked, the operating system's virtual memory subsystem cannot borrow that memory for other uses. No part of the database is ever paged out but this could lead to memory shortages in a system that is under configured with RAM. While memory locking can improve database load performance, it may impede other applications on the same computer.
max memory size 메모리에 상주할 수 있는 최대 크기(resident set size) 제한 
this parameter limits the amount of memory that can be "swapped in" to physical RAM on behalf of any one process.
open files 오픈할 수 있는 file descriptor의 최대 개수 제한. 소켓 포함. sysctl 에 정의된 fs.file-max 값보다 작아야 함
pipe size 512 bytes 블록 단위로 파이프 크기 설정
when two Unix processes communicate via a pipe of FIFO(first in first out) buffer, as in the simple case of paging through a directory listing with the command "ls | more", the output of the first command is buffered before transmission to the second. The size of this buffer, in bytes, is the pipe size.
POSIX message queues POSIX message queues 에 의해 사용되는 최대 메모리 제한
POSIX message queues allow processes to exchange data in the form of messages.
real-time priority the maximum real-time scheduling priority
stack size 스택의 최대 크기 제한. 프로세스가 stack에 할당할 수 있는 최대 메모리량, stops runaway recursive function
 cpu time 초당 사용 가능한 CPU의 최대 허용 시간 제한
max user processes 한 사용자에게 허용 가능한 프로세스의 최대 개수 제한
virtual memory shell에 허용 가능한 가상 메모리의 최대량 제한. stack, heap 등을 모두 포함. 이 수치를 넘어가는 메모리 할당이 생길 경우 OOM(Out Of Memory) 발생
file locks the maximum number of file locks the user can hold

`http://ktdsoss.tistory.com/159   출처

 

[LINUX] ulimit

Linux 에서의 ulimit 에 대해서 글 올립니다. ulimit 이란, shell과 shell이 실행한 프로세스에 대하여 시스템 상의 사용 자원을 제한할 수 있도록 해주는 명령어입니다. 예제를 보시면 다음과 같습니다.

ktdsoss.tistory.com

실무적인 조건 상황

 

max user process (-n ), open files(-u) 수가 해당 설정값을 초과해서 동작할시에 이슈가 있을 수 있다.

를 들어 web서비스의 아파치 서버로 접속하는 동시접속 인원들의 증가때문에 apache PID(자식 프로세스)가

증가하여 기존의 max user processes  (-u) 4096  이었던 것이 4097 이상으로 초과할 시

apache 서비스가 hang 발생될 수 있다.

 

 

ulimit -n 4096 ; ulimit -u 2048 으로 각각 설정했음.

 

일시적으로 변경하는 방법과 영구적용 방법이 있다.

 

일시적으로 적용해도 session을 재접속하거나 및 logout하면 바로 기본값으로 변경되므로,

(ulimit -a 로 확인하면 초기설정으로 확인됨)

추가적으로  /etc/security/limits.conf에서 설정파일을 수정해주고,

/etc/security/limits.d/2-nproc.conf, /etc/profile ( #source /etc/profile적용 명령어 ) 에 수정 후

#sysctl -p 로 적용해주면 된다.

 

실질적으로 /etc/profile에 수정해준값만 적용됨 , /etc/security/limits.d/2-nproc.conf에선 적용되지 않음.

 

 

 


코어 덤프란?

  • 특정 시점에 작업 중이던 메모리 상태를 기록한 것
  • 프로그램이 비정상적으로 종료했을 때 만들어진다.

https://n1tjrgns.tistory.com/243

 

[리눅스]쓰레드 덤프, 힙 덤프, 코어 덤프 분석 삽질과정

개발서버(톰캣)가 자주 죽었다. 그것도 아무 에러로그 없이. 그럼 원인을 어떻게 찾아야하지?? 정확한 원인을 파악하기 위해서는 쓰레드 덤프, 힙 덤프를 떠보고 메모리 사용량 CPU 사용량 등등

n1tjrgns.tistory.com

 

 

'OS Linux[centos,RHEL] > process 관리 이해' 카테고리의 다른 글

kill,killall 명령어  (0) 2021.11.20