Obtendo muitos erros de arquivos abertos para o Postgres

3

No servidor Ubuntu 14.04 em um aplicativo JAVA, estamos obtendo muitos erros de arquivos abertos para o Postgres (usando o Postgresql 9.5).

Nós definimos o seguinte em /etc/security/limits.conf

* soft nofile 16384
* hard nofile 16384
root soft nofile 16384
root hard  nofile 16384
postgres soft nofile 16384
postgres hard  nofile 16384

Defina também o seguinte em /etc/sysctl.conf

kern.maxfiles=20480
kern.maxfilesperproc=18000

Veja também os seguintes resultados durante a execução do usuário do Postgres:

-> ulimit -Hn
16384

-> ulimit -Sn
16384


-> cat /proc/sys/fs/file-max
100268

Depois de reiniciar o servidor e verificar o ulimit para o Postgres seu 100268. Mas enquanto verifica o limite de arquivos abertos em postgres processa seus 1024 e 4096 ainda

# cat /proc/1072/limits

Max open files            1024                 4096                 files

Quando reiniciámos os serviços do postgres, mudamos para

#cat /proc/1759/limits
Max open files            16384                16384                files

Mas parece que não é afetado porque ainda estamos recebendo o erro "Too many Open files".

Também no servidor os diretórios /etc/security/limits.d/ e /etc/security/conf.d/ e vazios. Então alguém pode me guiar?

    
por Geo 21.06.2016 / 16:05

2 respostas

4

@dilyin Obrigado pela atualização.

Atualizamos o valor ulimit no script de inicialização do PostgreSQL, mas ainda assim o problema estava lá.

Por fim, corrigimos o problema reduzindo max_files_per_process a 200 do padrão 1000. Esse parâmetro está no arquivo postgresql.conf e isso define o número máximo de arquivos abertos simultaneamente permitidos para cada subprocesso do servidor.

    
por 24.06.2016 / 06:45
3

Ah ... O problema conhecido.

Geralmente as pessoas começam a editar o arquivo "/etc/security/limits.conf", mas esquecem que este arquivo só se aplica aos usuários logados ativamente através do sistema pam.

Se você iniciar o banco de dados manualmente usando o script init, o proces do banco de dados herdará seus limites modificados, mas se o banco de dados for iniciado na inicialização ou iniciado por algo como systemd, ele não será.

Existem arquivos "/ etc / defaults / $ service para o Debian e" / etc / sysconfig / $ service para o RedHat. Esses arquivos são originados pelo script init antes que o daemon seja executado. Adicione ulimit -s unlimited ou algo assim a esses arquivos. Os limites serão aplicados no shell do script de inicialização e afetarão o processo do banco de dados.

Kernel maxfiles deve ser definido também.

    
por 21.06.2016 / 18:09