
( 나를 지시하는 man setrlimit
내용 ) 에 따르면 ,man ulimit
RLIMIT_RSS
프로세스의 상주 세트(RAM에 상주하는 가상 페이지 수)의 제한(바이트)을 지정합니다. 이 제한은 Linux 2.4.x, x < 30에서만 적용되며 MADV_WILLNEED를 지정하는 madvise(2) 호출에만 영향을 미칩니다.
따라서 ulimit
(및 setrlimit
)은 프로세스에서 사용하는 가상 메모리만 제한할 수 있는 것 같습니다. 반면에 다음과 같은 대답이 나온다.이 하나특히 가상 메모리가 사용될 것보다 훨씬 더 많은 가상 메모리를 요청하는 것이 일반적인 Java 애플리케이션에서는 가상 메모리가 거의 의미 없는 통계라고 주장합니다(올바로 보입니다).
그래서 저는 시스템에 부과할 수 있는 한계와 실제로 의미 있는 숫자 사이의 단절처럼 보이는 역사가 궁금합니다. 대답할 수 있는 한, 현재 상황이 왜 이러합니까?
답변1
RSS는 구현 세부 사항입니다. 프로그램이 제어할 수 있는 유일한 리소스는 RLIMIT_AS 및 RLIMIT_DATA입니다. Unix 구현은 RSS == VMA를 항상(요청된 모든 메모리 커밋) 수정할 수 있으며 모든 Java 가상 머신은 컴퓨터가 메모리를 낭비할 준비가 될 만큼 충분히 강력하지 않을 때마다 로드하는 동안 충돌을 일으킬 수 있습니다.
따라서 참조 스레드의 댓글은 그 사람의 의견일 뿐이며 유닉스 아키텍처와 일치하지 않습니다.
Linux에서 이 동작을 시도하려면:
- mem=4G 매개변수를 사용하여 커널 부팅(또는 다른 값으로 시도)
- sudo sysctl vm.overcommit_memory=2
- Chromium 또는 4GB 이상을 예약하려는 일부 프로그램 실행(충돌)