Pessoal, neste post ( apesar de bem direcionado para Oracle ) vou trazer algumas informações úteis sobre parametrização de memória no Linux.

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.

* Ao final do artigo temos alguns macetes para alterar o tamanho da TMPFS

Shared Memory

É uma parte da memória reservada pelo sistema operacional para que processos gravem e leiam informações. Inclusive leiam informações gravadas por outros processos.
Alguns processos do Oracle usam shared memory para comunicação, troca de informações ou mesmo compartilhamento de objetos. (SGA, por ex.)

Uma SHARED MEMORY sub-dimensionada ou uma SGA mal dimensionada poderão trazer erros como:
ORA-04031: unable to allocate XXX bytes of shared memory
ORA-27123: unable to attach to shared memory segment

Como dimensionar a Shared Memory?

É muito complicado dar uma receita de como definir o tamanho da SHARED MEMORY. Normalmente vai depender da finalidade do servidor, da finalidade do banco de dados, etc, etc.
Porém vamos explicar as recomendações da ORACLE para este tópico e como uma base convencional trabalha.

Como verificar o dimensionamento da minha SHARED MEMORY?

No linux existem duas maneiras de verificar como está sua shared memory:
– Através do comando sysctl
– Através dos arquivos dentro de /proc/sys/kernel

Existem, basicamente, 3 parâmetros para trabalharmos a shared memory:
– 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.

Verifique o estado de seu sistema com:

[root@btec-mgmtlx01 ~]# sysctl -a | grep shm
kernel.shmmax = 33554432
kernel.shmall = 2097152
kernel.shmmni = 4096

ou com:

[root@btec-mgmtlx01 ~]# more /proc/sys/kernel/shm*
::::::::::::::
/proc/sys/kernel/shmall
::::::::::::::
2097152
::::::::::::::
/proc/sys/kernel/shmmax
::::::::::::::
33554432
::::::::::::::
/proc/sys/kernel/shmmni
::::::::::::::
4096

Agora vamos ao que interessa, como definir a SHARED MEMORY….

A ORACLE recomenda:

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: A Oracle recomenda 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.
OBS: para ver o tamanho de sua página execute:

[root@btec-mgmtlx01 ~]# getconf PAGE_SIZE
4096

E aí, curtiu a receita de bolo pra definir a shared memory?

Como setar os novos valores de SHARED MEMORY?

Edite o arquivo /etc/sysctl.conf e altere os parametros da seguinte forma:

kernel.shmmax = <SUA_RAM_EM_BYTES/2>
kernel.shmall = <SUA_RAM_EM_BYTES / TAMANHO_DA_PAGINA>
kernel.shmmni = 4096

e para atualizar o sistema execute:

[root@btec-mgmtlx01 ~]# sysctl -p
kernel.shmmax = 16777216
kernel.shmall = 4194304
kernel.shmmni = 4096

Dicas

Como alterar o tamanho da TMPFS?
on the fly:

mount -oremount,size=<TAMANHO_EM_MB>M /dev/shm

de maneira persistent: altere o arquivo /etc/fstab e adicione a opção size=M na linha do tmpfs como no exemplo:

/dev/xvda1 /                       ext3    defaults        1 1
/dev/xvda2 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults,size=8192M        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

Obs: evite deixar a tmpfs acima de 75% da RAM.

Pessoal, espero que este artigo possa ajudá-los com definições de memória.

Link Interessante para estudo:
Recomendações RHEL para Oracle

Forte abraço a todos!