O servidor PostgreSQL falhou ao iniciar: a solicitação de um segmento de memória compartilhada excedeu o parâmetro SHMMAX do seu kernel

1

Eu aumentei o buffer compartilhado do PostgreSQL (entre outras configurações) para 4096M e agora o PostgreSQL não inicia, dando a mensagem de erro abaixo.

Devo alterar o parâmetro SHMMAX do kernel para 4096M? O sistema tem 16GB de RAM. Como isso deve ser feito? O que devo alterar SHMALL para? Eu quero que as mudanças sejam permanentes e persista após as reinicializações.

* Starting PostgreSQL 9.1 database server                                       
* The PostgreSQL server failed to start. Please check the log output:

2013-04-15 06:15:53 UTC FATAL: could not create shared memory segment: Invalid argument 2013-04-15 06:15:53 UTC DETAIL: Failed system call was shmget(key=5432001, size=4418322432, 03600). 2013-04-15 06:15:53 UTC HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 4418322432 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections. If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for. The PostgreSQL documentation contains more information about shared memory configuration.

grátis

             total       used       free     shared    buffers     cached
Mem:      24744200    1244936   23499264          0      77480     670240
-/+ buffers/cache:     497216   24246984
Swap:     16775160          0   16775160
    
por Nyxynyx 15.04.2013 / 08:18

2 respostas

2

Parece que você editou yout shared_buffers em sua configuração do padrão. E você tem muita memória, então provavelmente você está tentando fazer isso mais do que o kernel está deixando.

Portanto, crie um arquivo como

/etc/sysctl.d/10-postgresql-shm.conf

Depois, inclua o seguinte

kernel.shmmax = 4414768

Substitua o número com o que você quer colocar lá .. Então, para configurá-lo, execute o seguinte

sudo sysctl -p

Em seguida, tente iniciar o postgresql

    
por 15.04.2013 / 08:39
3

Na documentação do PostgreSQL ,

The most important shared memory parameter is SHMMAX, the maximum size, in bytes, of a shared memory segment. If you get an error message from shmget like "Invalid argument", it is likely that this limit has been exceeded. [...] While it is possible to get PostgreSQL to run with SHMMAX as small as 2 MB, you need considerably more for acceptable performance. Desirable settings are in the hundreds of megabytes to a few gigabytes.

Mais abaixo na página, há exemplos de como fazer as alterações no Linux. Para permitir 8 GB:

$ sysctl -w kernel.shmmax=8589934592
$ sysctl -w kernel.shmall=2097152

Se isso funcionar, você pode fazer com que as configurações entrem em vigor na próxima inicialização, editando /etc/sysctl.conf .

O valor selecionado depende do que mais você está usando na máquina. Se é um servidor PostgreSQL dedicado, vá em frente e permita que a maior parte da memória da máquina seja usada para memória compartilhada pelo PostgreSQL. Se você pretende executar outras coisas também na mesma máquina, então você pode querer ser mais conservador.

    
por 15.04.2013 / 08:50