shmmax definindo em sysctl.conf não entrando em vigor

1

Estamos executando o RHEL 4 Update 6 e estamos passando por uma instalação do Oracle. De acordo com o Oracle Installation Guide, estou tentando atualizar o valor de shmmax. De acordo com o guia, adicionei a seguinte linha ao /etc/sysctl.conf:

 kernel.shmmax = 5319303168

No entanto, quando eu insiro subsequentemente o seguinte comando para verificar:

/sbin/sysctl -a | grep shm 

Eu posso ver que o valor ainda é 1024335872. Se eu executar o seguinte:

cat /proc/sys/kernel/shmmax

Eu também posso ver o valor 1024335872. Eu tentei reiniciar o sistema, mas isso ainda não funciona. Alguma idéia de como eu posso fazer essa configuração entrar em vigor?

    
por Patrick 28.08.2009 / 04:12

3 respostas

1

OK, acho que sei porquê. Esta é a versão de 32 bits do Linux. Parece que o valor máximo para o shmmax, neste caso, é de 2 GB.

    
por 28.08.2009 / 05:13
3

Primeiro, editar o sysctl.conf não altera o valor até que você reinicie ou execute:

sysctl -p

Para recarregar os valores.

Você mencionou que este é um Linux de 32 bits. Isso coloca restrições sobre quão grande você pode definir para o SHMMAX e quão grande o Oracle SGA pode ser. Consulte Instalando o Oracle9i no FC2 para obter mais informações sobre os limites que você encontrará aqui. A maior configuração geralmente útil é esta:

kernel.shmmax=2147483648

E como o que você tentou é > 4 GB, é por isso que ele falhou completamente.

Muitas pessoas parecem usar algum guia ou sugestões da Oracle para uma configuração aqui como um número mágico sem realmente considerar se os valores de memória compartilhada realmente fazem sentido para o sistema ou não. Eu escrevi o pequeno script a seguir para gerar as configurações para mim no Linux. Conforme escrito, limita o bloco de memória compartilhada a 50% do total de RAM, o que pode ser leve para o uso do Oracle; É fácil ajustá-lo a uma porcentagem maior. Eu odeio ver as pessoas configurarem esse valor para mais do que a quantidade de RAM em seu servidor.

#!/bin/bash
mem_bytes='awk '/MemTotal:/ { printf "%0.f",$2 * 1024}' /proc/meminfo'
mem_max='expr $mem_bytes / 2' 
page_size='getconf PAGE_SIZE'
shmall='expr $mem_bytes / $page_size'
echo \# Maximum shared segment size in bytes
echo kernel.shmmax = $mem_max
echo \# Maximum number of shared memory segments in pages
echo kernel.shmall = $shmall

A saída disso pode ser escrita diretamente no final do sysctl.conf, rode "sysctl -p" e você está com uma configuração razoável, mas segura.

    
por 28.08.2009 / 09:22
0

Minhas anotações em conjunto para o Oracle mostram as mesmas instruções. A única coisa que faço de diferente é primeiro rodar echo 5319303168 > / proc / sys / kernel / shmmax . Eu sei que é a configuração em execução e as outras configurações seriam para sobreviver à reinicialização.

Qual versão do Oracle? Estou seguindo minhas instruções do 9i e não tenho certeza de que executo uma versão do 9i no 4.x. Eu teria que olhar para as instalações 10g desde que eu não fiz um deles.

    
por 28.08.2009 / 04:30