Ulimit
프로세스들에 대한 시스템 자원사용을 제한
Apache와 같은 웹 서비스를 운영 시 동시 접속자가 많은 경우 구동되는 Apache 프로세스 수와 해당 프로세스가 처리하게되는 파일 수 또한 증가하게 되는데 이에 따라 시스템에서도 해당 설정을 조정하는 방법이 필요로 하기에 사용
프로세스의 자원 한도를 설정하는 방법에는 soft와 hard가 있음
ulimit 명령어를 사용하면 커널의 성능과 기능에 영향을 주게 되므로 사용시에 주의해서 사용
sysvinit 환경과 systemd 환경에서 설정하는 방법이 달라짐
한도
- soft - 새로운 프로그램을 생성하면 기본적으로 적용되는 한도
- hard - 소프트한도에서 최대로 늘릴 수 있는 한도
설정 목록
- nofile
- 해당 도메인 (사용자, 그룹)이 오픈할 수 있는 최대 파일 개수
- 오픈할수 있는 파일기술자(FD: file descriptor)의 최대 개수 제한
- 해당 도메인 (사용자, 그룹)의 최대 프로세스 개수
- 한 사용자에게 허용 가능한 프로세스(user processes)의 최대 개수 제한
- Core 파일 크기를 제한
- 코어(core) 파일 생성시 최대 크기 제한
- 데이터 최대 크기
- 프로세스 데이터세그먼트(process data segment)의 최대 크기 제한
- 파일 최대 크기
- 쉘에 의해 만들어질 수 있는 파일의 최대크기 제한
- 최대 잠겨진 메모리 주소 공간
- 쉘에 허용 가능한 가상메모리(virtual memory)의 최대량 제한
- 최대 상주 메모리 크기
- 메모리에 상주(resident set size)할수 있는 최대 크기 제한
- 스택 최대 크기
- 스택크기(stack size)의 최대크기 제한
- 최대 CPU 시간
- 초(second)당 사용 가능한 CPU의 최대 허용 시간(cpu time) 제한
- 주소 공간 제한
- 512byte 블록단위로 파이프크기(pipe size)설정
- 이 사용자의 최대 로그인 수
- 시스템의 최대 로그인 수
- 사용자 프로세스를 실행하는 우선 순위
- 사용자가 보유할 수 있는 최대 파일 잠금 수
- 보류 중인 최대 신호 수
- POSIX 메시지 큐에서 사용하는 최대 메모리
- 값으로 올릴 수 있는 최대 nice 순위 [-20 ~ 19]
- 최대 실시간 우선 순위
- 루트를 디렉토리로 변경 (데비안 특정)
옵션
-
-a
- 모든 제한 값 출력 -
-b
- 최대 소켓 버퍼 크기 제한 -
-d
- 프로세스의 데이터 세그먼트 최대 크기 제한 -
-e
- 최대 우선 예약 순위 -
-f
- 쉘에 의해 생성된 파일의 최대 크기 제한 -
-i
- 보류중인 신호의 최대 수 제한 -
-l
- 메모리에 잠길 수 있는 최대 크기 제한 -
-s
- stack 최대 크기 제한 -
-t
- CPU의 초당 사용시간 제한 -
-m
- 메모리에 상주 가능한 최대 크기 제한 -
-c
- core파일이 생성될때의 최대 크기 제한 -
-u
- 특정 사용자의 사용가능한 프로세스의 최대갯수 제한 -
-v
- 쉘이 사용할 수 있는 가상 메모리의 최대 크기 제한 -
-p
- 512 byte 블록으로 파이프 크기를 설정 -
-q
- POSIX 메시지 대기 행렬의 최대 byte 수 제한 -
-r
- 최대 실시간 스케줄링 우선 순위 -
-n
- 오픈가능한 FD의 갯수 제한 (too many open file 등의 Error가 발생하는 경우 해당 값을 수정하여 해결 가능) -
-x
- 최대 파일 잠금 수 제한 -
-S
- 주어진 자원에 대한 소프트 한도 설정 -
-H
- 주어진 자원에 대한 하드 한계 설정 -
-T
- 최대 스레드 수 제한
값 확인
- core file size - 코어파일의 최대 크기 (-c 옵션)
- data seg size - 프로세스의 데이터 세그먼트 최대 크기 (-d 옵션)
- scheduling priority - 쉘에서 생성되는 파일의 최대 크기 (-e 옵션)
- file size - 파일의 최대 크기 (-f 옵션)
- pending signals - 보류중인 신호 제한 (-i 옵션)
- max locked memory - 메모리에 잠길 수 있는 최대 크기 (-l 옵션)
- max memory size - resident set size의 최대 크기 (메모리 최대크기로 -m 옵션)
- open files - 한 프로세스에서 열 수 있는 open file descriptor의 최대 수 (열수 있는 최대 파일 수로 -n 옵션)
- pipe size - 512 byte 블록의 파이프 크기 (-p 옵션)
- POSIX message queues - POSIX 메시지 대기 행렬의 최대 byte 수 (-q 옵션)
- real-time priority - 최대 실시간 스케줄링 우선 순위 (-r 옵션)
- stack size - stack 최대 크기 (-s 옵션)
- cpu time - 총 누적된 CPU 시간[초] (-t 옵션)
- max user processes - 단일 유저가 사용가능한 프로세스의 최대 갯수 (-u 옵션)
- virtual memory - 쉘에서 사용가능 한 가상 메모리의 최대 용량 (-v 옵션)
- file locks - 최대 잠금 파일 수 (-x 옵션)
설정방법
/etc/security/limit.conf
파일 수정:
- Domain : 제한할 대상 작성 (*, User명, 그룹명) - 그룹에 적용할 경우 @가 붙음
- Type : 강하게 제한할 것인지 여유를 줄 것인지 결정 (Soft, Hard)
- Item : 제한할 항목으로 core, data, seg, file size 등 여러가지 존재 (stack, nproc, nofile 등등)
- Value : 제한하고자 하는 설정 값
systemd에서 ulimit 설정
systemd에서는 /etc/security/limits*
를 완전히 무시한다. 그러므로 systemd에서 limits 설정은 기존 방법과 다르게 설정하여야 한다.
적용 순위는:
- Service Daemon
- Global
파일 경로:
- System -
/etc/systemd/system.conf
- User -
/etc/systemd/user.conf
Options
Directive | ulimit equivalent | Unit |
| | Seconds |
| | Bytes |
| | Bytes |
| | Bytes |
| | Bytes |
| | Bytes |
| | Number of File Descriptors |
| | Bytes |
| | Number of Processes |
| | Bytes |
| | Number of Locks |
| | Number of Queued Signals |
| | Bytes |
| | Nice Level |
| | Realtime Priority |
| | Microseconds |
See also
Favorite site
References
-
Core_dump_setting_-_Open_Source_Technology_Blog.pdf ↩