De acordo comDocumento RHEL, a quantidade total de memória compartilhada disponível no sistema é igual a shmall*PAGE_SIZE
.
Depois de concluir a instalação do RHEL 6, o valor shmall
padrão do parâmetro do kernel é 4294967296, o que significa que a quantidade total de páginas de memória compartilhada que podem ser usadas em todo o sistema é 4294967296 e o tamanho da página é 4096 B. Portanto, com base na fórmula, o tamanho da memória compartilhada é
4294967296*4096/1024/1024/1024/1024 = 16 TB
... que é muito maior do que o tamanho da RAM (8 GB) que o sistema operacional possui. Como um sistema operacional pode encontrar 16 TB de memória compartilhada para alocar?
Então, o tamanho é /dev/shm
igual ao tamanho da memória compartilhada? Caso contrário, como posso obter o tamanho real da memória compartilhada?
Responder1
Seu cálculo está correto. shmall pode ser definido acima da memória virtual disponível. Se você tentasse usar tudo isso, não falharia por causa de um pequeno valor excedido, mas por outros motivos.
Aliás, também existem comandos para encontrar esses limites de IPC:
ipcs -l
lsipc # util-linux>=2.27
Observe que mesmo a memória virtual é ilimitada no Linux por padrão, maior que RAM+swap. Ver
https://serverfault.com/questions/606185/how-does-vm-overcommit-memory-work
Como o assassino OOM decide qual processo matar primeiro?
Por outro lado você poderialimitea memória virtual por processo ulimt -v
que também não afetaria o kernel /proc/sys/kernel/shmall
.