커널 설정이 있습니다
/ proc / sys / vm / overcommit_memory
우수 논문 인용 :
Since 2.5.30 the values are: 0 (default): as before: guess about how much
overcommitment is reasonable, 1: never refuse any malloc(), 2: be precise
about the overcommit - never commit a virtual address space larger than swap
space plus a fraction overcommit_ratio of the physical memory. Here
/proc/sys/vm/overcommit_ratio (by default 50) is another user-settable
parameter. It is possible to set overcommit_ratio to values larger than 100.
(See also Documentation/vm/overcommit-accounting.)
이것은 일반적인 malloc뿐만 아니라 포크에도 적용됩니다. 즉, 0으로 설정하면 포크는 쓰기시 복사됩니다. 쓰기시 복사는 앱이 포크되면 두 복사본이 모두 하위 또는 유틸리티가 메모리를 변경하기 시작하는 메모리 페이지를 공유 함을 의미합니다.
대부분의 배포판에서 overcommit은 0이라는 것을 알고 있습니다. 그러나 2로 설정하면 모든 메모리 페이지가 실제 메모리에 의해 완전히 백업되며 경우에 따라 높은 메모리 압력 하에서 더 안정적이지만 일부 프로그램은 gitk에 직면합니다. 초과 커밋에 실패합니다.
If enough is available the kernel will commit to the full virtual size of the parent for both processes after the fork.
네 감사합니다. 메모리 (RAM 및 스왑)가 제한된 환경에서 프로세스의 가상 풋 프린트를 줄이면 분기 할 수없는 문제를 해결할 수 있습니다.