에 따르면RHEL 문서, 시스템에서 사용 가능한 공유 메모리의 총량은 과 같습니다 shmall*PAGE_SIZE
.
RHEL 6 설치를 완료한 후 shmall
커널 매개변수의 기본값은 4294967296입니다. 즉, 시스템 전체에서 사용할 수 있는 공유 메모리 페이지의 총량은 4294967296이고 페이지 크기는 4096B입니다. 공식에서 공유 메모리의 크기는
4294967296*4096/1024/1024/1024/1024 = 16 TB
... 이는 운영 체제의 RAM(8GB) 크기보다 훨씬 큽니다. OS는 할당할 16TB의 공유 메모리를 어떻게 찾을 수 있습니까?
그렇다면 의 크기는 /dev/shm
공유 메모리의 크기와 같습니까? 그렇지 않다면 공유 메모리의 실제 크기를 어떻게 알 수 있습니까?
답변1
당신의 계산은 정확합니다. shmall은 사용 가능한 가상 메모리보다 높게 설정할 수 있습니다. 모든 것을 사용하려고 하면 shmall이 초과되었기 때문에 실패하는 것이 아니라 다른 이유로 인해 실패할 것입니다.
그런데 이러한 IPC 제한을 찾는 명령도 있습니다.
ipcs -l
lsipc # util-linux>=2.27
가상 메모리도 기본적으로 Linux에서는 무제한으로 RAM+스왑보다 큽니다. 보다
https://serverfault.com/questions/606185/how-does-vm-overcommit-memory-work
OOM 킬러는 어떤 프로세스를 먼저 종료할지 어떻게 결정합니까?
반면에 당신은 할 수 있습니다한계ulimt -v
커널에도 영향을 미치지 않는 프로세스 당 가상 메모리를 사용합니다 /proc/sys/kernel/shmall
.