
이것은 내 현재 설정입니다.
vm.overcommit_ratio = 50 (default)
vm.overcommit_memory = 2
현재 메모리 사용량:
[localhost~]$ free -g
total used free shared buffers cached
Mem: 47 46 0 0 0 45
-/+ buffers/cache: 1 45
Swap: 47 0 47
~에 따르면문서내 이해는 다음과 같습니다
vm.overcommit_memory = 2
RAM의 50%를 초과하는 메모리 오버커밋은 허용되지 않지만 (as vm.overcommit_ratio is 50)
, 현재 메모리 사용량은 47GB 중 46GB인 것을 볼 수 있습니다.
제가 뭔가 잘못 이해한 걸까요?
답변1
실제로 vm.overcommit_memory=2를 설정하면 과잉 커밋이 허용됩니다. overcommit_ratio를 (예를 들어) 200으로 설정하면 메모리를 스왑 + (RAM * 200/100) 범위로 커밋할 수 있습니다.
커널 문서는 약간 오해의 소지가 있습니다. "2"는 오버커밋하지 않음을 의미합니다. 이는 이 제한에 커밋하는 것을 의미하며, 이는 실제로 overcommit_ratio(실제로 백분율이므로 잘못된 이름임)가 100보다 큰 경우에 허용됩니다. .
vm.overcommit_memory는 오버커밋 제한을 설정하는 것으로 더 정확하게 설명됩니다.기본적으로과도한 사용은 허용되지 않습니다.
제출 제한을 확인할 수 있습니다.
$free -m | awk '$1 ~/[Mm]em/ {print $2}' ; sysctl -a 2>/dev/null | grep vm.over ; grep -i commitlimit /proc/meminfo
vm.overcommit_kbytes = 0
vm.overcommit_memory = 2
vm.overcommit_ratio = 800
CommitLimit: 23449596 kB
답변2
이러한 vm.overcommit_*
설정은 사용자 공간 메모리 할당을 제어합니다. 커널이 할당할 수 있는 메모리에는 영향을 주지 않습니다. 또한 얻는 가치의 50%는 물리적 메모리 + 스왑 공간입니다. 47+47=94. 따라서 사용자 공간은 최대 47GB까지 할당할 수 있습니다.
출력 free
에 따르면 1GB는 사용자 공간에서 사용되고 45GB는 커널에서 캐시용으로 사용됩니다. 1GB의 사용자 공간은 94GB의 50%에도 훨씬 못 미칩니다.
추가 수정:
vm.overcommit_memory = 2
RAM의 50%를 초과하는 메모리 남용은 허용되지 않습니다.
이 설정은 과도한 사용을 허용하지 않습니다별말씀을요. 와 함께 사용하면 vm.overcommit_ratio=50
사용자 공간이 총 메모리의 최대 50%까지 커밋할 수 있습니다. "커밋" != "오버커밋"