다음 명령을 실행합니다.
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) 14881
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
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
max user processes (-u) 14881
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
문제는 이 한도에 도달하면 어떻게 됩니까? 한도에 도달했고 이제 몇 가지 조치를 취해야 한다는 것을 어떻게 알 수 있나요?
예를 들어 max-user-processes가 819200에 도달하면 새 프로세스가 시작되지 않는다는 의미입니까? 아니면 시스템이 대부분의 유휴 프로세스를 정상적으로 종료하여 일부 공간을 확보하게 됩니까? 아니면 다른 것일 수도 있나요?
언급된 숫자/제한으로 인해 시스템 성능에 오버헤드가 추가됩니까?
답변1
애플리케이션을 대신하여 리소스를 할당하면 애플리케이션의 리소스 제한을 초과하는 경우 리소스 할당이 실패합니다. "최대 사용자 프로세스" 값이 N이고 특정 사용자에 대해 N개의 프로세스가 실행 중인 경우 fork()
시스템 호출(또는 관련)에 대한 호출이 실패합니다. "열린 파일" 값이 M이고 M개의 열린 파일이 있는 경우 open()
(또는 관련) 시스템 호출에 대한 호출이 실패합니다.
이러한 값은 시스템이 항상 이러한 값을 모니터링하기 때문에 시스템 성능에 오버헤드를 추가하지 않습니다.
답변2
포함하는 출력 데이터는 실제로 리소스 제한이 아닙니다. 쉘이 속임수를 쓰고 이 목록에 관련 없는 다른 항목을 많이 추가하기 때문입니다.
실제 리소스 제한을 알고 싶다면 치트가 되지 않는 쉘을 사용하거나 파일을 확인해보세요
/usr/include/sys/resource.h
RLIMIT_*
해당 파일에서 항목을 찾으십시오 .
이제 소프트 한계에 도달하면 어떻게 될까요?
무시할 수 있는 신호를 프로세스에 보냅니다. 신호는 다음과 같습니다.
SIGXCPU SIGXFSZ
하드 한계에 도달하면 프로세스가 종료됩니다.
이는 모든 제한 사항에 적용되는 것은 아닙니다. 확인하다http://schillix.sourceforge.net/man/man2/getrlimit.2.html각 특정 한도에서 어떤 일이 발생하는지에 대한 설명을 확인하세요.