Linux Tunning : Shared Memory

Neste post será apresentado como configurar o shared memory no Linux, neste post específico estarei utilizando um Redhat.

De forma conceitual , shared memory é uma parte da memória reservada pelo sistema operacional para que os processos gravem e leiam informações e informações registradas por outros processos.

sharing-c-objects-in-linux-2-638

Dimensionar Shared memory com algum template específico é muito complicado , pois cada servidor tem seu serviço específico. (Ex App Server, DB server e etc..) .

1) TMPFS :

Partição virtual que representa a área reservada para memória compartilhada ( shared memory ).
Esta partição pode ser encontrada no arquivo /etc/fstab e normalmente tem o tamanho equivalente a metade da memória RAM.

2) Configuração de Shared Memory :

Nas definições de shared memory temos as seguintes opções :

kernel.shmmax: Tamanho máximo de um segmento de shared memory.

kernel.shmmni: Número máximo de segmentos de shared memory.

kernel.shmall: Número de página alocáveis na shared memory.

Podemos ver estes valores no arquivo /etc/sysctl.conf :

Saída do comando sysctl -a | grep shm

shm01

3) Setando novos valores :

kernel.shmmax: Deve ser calculado como metade do tamanho da memória RAM ( em Bytes ).
Ex: se sua memória RAM tem 16777216 kB, então sua shmmax deverá ser do tamanho de 8589934592.

kernel.shmmni:É recomendado que este parâmetro seja no mínimo de 4096. Normalmente isto é suficiente.

kernel.shmall: A recomendação é que a shmall seja igual ao total de RAM dividido pelo tamanho de cada página.

Ex: se sua memória RAM tem 16777216 kB e sua página tem o tamanho de 4096, então sua shmall deverá ser de 4194304.

Fórmula básica :

O valor de MEM RAM deverá ser em bytes

kernel.shmmax: MEM RAM / 2
kernel.shmall: MEM RAM / PAGE SIZE
kernel.shmmni: 4096

Para descobrir o tamanho da PAGE_SIZE rode o comando

getconf PAGE_SIZE

Altere os valores no arquivo /etc/sysctl.conf e rode o comando sysctl -p

 

3) Alteração na partição TMPFS :

Alterando com o servidor em produção :

mount -oremount,size=8192M /dev/shm

 

Altere a entrada do arquivo /etc/fstab adicionando a entrada size :

tmpfs /dev/shm tmpfs defaults,size=8192M 0 0

 

Não deixe que o tamanho chegue à 75% de memória RAM.

 

4) Validação :

Podemos acompanhar o histórico dos últimos processos que utilizaram shared memory via comando ipcs .

ipcs -s -t

sh02

Referências :

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/pdf/Performance_Tuning_Guide/Red_Hat_Enterprise_Linux-7-Performance_Tuning_Guide-en-US.pdf
http://certificacaobd.com.br/2012/10/15/definindo-a-shared-memory-no-linux/
http://rwitkop.com/VistA/ConfigureSysctl4Cache.html
http://gerardnico.com/wiki/linux/shared_memory
http://www.slideshare.net/RobertoAgostinoVitil/sharing-objects2011