O erro pode ocorrer devido a vários motivos.
Primeiro de tudo, use o seguinte comando para exibir o número máximo de descritores de arquivos abertos:
$ cat /proc/sys/fs/file-max
Vamos fingir que a saída foi 4096, o que isso significa? Isso significa que 4096 arquivos que um usuário normal pode abrir em uma única sessão de login, você também pode exibi-lo verificando seus limites Hard e Soft usando os comandos da seguinte maneira:
$ ulimit -Hn
$ ulimit -Sn
O número de descritores de arquivos abertos simultaneamente em todo o sistema pode ser alterado, editando /etc/sysctl.conf
. Você pode aumentar o número máximo de arquivos abertos definindo limites de descritores de arquivos em todo o sistema como um novo valor na variável do kernel em /proc/sys/fs/file-max
da seguinte maneira:
$ sysctl -w fs.file-max=200000 #it forces the limit to 200000 files
Em seguida, você deve editar o arquivo /etc/sysctl.conf
para que, após a reinicialização, a configuração permaneça como você desejava. Para fazer isso, adicione as seguintes linhas:
$ fs.file-max = 200000
Não é preciso sair e fazer login novamente, basta digitar:
$ sysctl -p
Depois, você pode verificar as alterações:
$ cat /proc/sys/fs/file-max
OR
$ sysctl fs.file-max
Em seguida, para alterar os limites de Soft e Hard para os usuários, é melhor fazer o login como root, já que um usuário normal só pode alterar seu limite Soft. Os limites rígidos são gerenciados pelo root. Como você mencionou, para fazer isso como root, você deve alterar o FD (User Level File-Discriptor) em /etc/security/limits.conf
. Por exemplo, se é para o usuário do Oracle:
oracle soft nofile 4096
oracle hard nofile 63536
Para ver as alterações, não é necessário reinicializar, basta relogar via sudo -i
e verificar se funciona ou não, para ter certeza de qual é o problema.
E para usuários sem login, você deve fazer o seguinte como root:
$ sudo -i -u <user>
BTW, você pode precisar de editar o arquivo /etc/pam.d/login e adicionar a seguinte linha:
$ session required pam_limits.so
pam_limit.so
em /etc/pam.d/login significa no momento do login, mas não no sudo, enquanto /etc/pam.d/sudo
também será aplicado ao executar sudo sem "-i", você também pode precisar aplicar as alterações acima em /etc/pam.d/system-auth dependendo das suas necessidades. Eu recomendo que você leia sobre módulos PAM.
BTW, para aplicar limites instantâneos aos processos atualmente em execução, você deve fazer o seguinte, além de alterar /etc/security/limits.conf
:
$ prlimit
Recomendo que você leia este artigo do RedHat , já que você pode se deparar com:
On some Linux systems setting "hard" and "soft" limits in the following examples might not work properly when you log in as user oracle via SSH. It might work if you log in as root and su to oracle. If you have this problem try to set UsePrivilegeSeparation to "no" in /etc/ssh/sshd_config and restart the SSH daemon by executing service sshd restart. The privilege separation does not work properly with PAM on some Linux systems. Make sure to talk to the people in charge of security before disabling the SSH security feature "Privilege Separation".
Espero poder ajudar. Boa sorte.