Como aumentar o limite do número de arquivos abertos no Linux
No Linux, você pode alterar a quantidade máxima de arquivos abertos. Você pode modificar este número usando o comando ulimit. Ele concede a você a capacidade de controlar os recursos disponíveis para o shell ou processo iniciado por ele.
Leia também: Definir limites de processos em execução do Linux em nível por usuário
Neste breve tutorial mostraremos como verificar seu limite atual de arquivos abertos e descrições de arquivos, mas para fazer isso, você precisará ter acesso root ao seu sistema.
Primeiro, vamos ver como podemos descobrir o número máximo de descritores de arquivos abertos em seu sistema Linux.
Encontre o limite de arquivos abertos do Linux
O valor é armazenado em:
cat /proc/sys/fs/file-max
818354
O número que você verá mostra o número de arquivos que um usuário pode abrir por sessão de login. O resultado pode ser diferente dependendo do seu sistema.
Por exemplo, em um servidor CentOS meu, o limite foi definido para 818354, enquanto no servidor Ubuntu que executo em casa o limite padrão era definido como 176772.
Se quiser ver os limites rígidos e flexíveis, você pode usar os seguintes comandos:
Verifique o limite rígido no Linux
ulimit -Hn
4096
Verifique os limites flexíveis no Linux
ulimit -Sn
1024
Para ver os valores duros e suaves para diferentes usuários, você pode simplesmente mudar o usuário com “su” para o usuário cujos limites você deseja verificar.
Por exemplo:
su marin
ulimit -Sn
1024
ulimit -Hn
4096
Como verificar os limites dos descritores de arquivos em todo o sistema no Linux
Se você estiver executando um servidor, alguns de seus aplicativos poderão exigir limites mais altos para descritores de arquivos abertos. Um bom exemplo disso são os serviços MySQL/MariaDB ou o servidor web Apache.
Você pode aumentar o limite de arquivos abertos no Linux editando a diretiva do kernel fs.file-max
. Para isso, você pode usar o utilitário sysctl.
Sysctl é usado para configurar parâmetros do kernel em tempo de execução.
Por exemplo, para aumentar o limite de arquivos abertos para 500.000, você pode usar o seguinte comando como root:
sysctl -w fs.file-max=500000
Você pode verificar o valor atual dos arquivos abertos com o seguinte comando:
cat /proc/sys/fs/file-max
Com o comando acima, as alterações feitas permanecerão ativas apenas até a próxima reinicialização. Se desejar aplicá-los permanentemente, você terá que editar o seguinte arquivo:
vi /etc/sysctl.conf
Adicione a seguinte linha:
fs.file-max=500000
Claro, você pode alterar o número de acordo com suas necessidades. Para verificar as alterações novamente, use:
cat /proc/sys/fs/file-max
Os usuários precisarão sair e fazer login novamente para que as alterações tenham efeito. Se quiser aplicar o limite imediatamente, você pode usar o seguinte comando:
sysctl -p
Definir limites de arquivo aberto em nível de usuário no Linux
Os exemplos acima mostraram como definir limites globais, mas você pode querer aplicar limites por usuário. Para isso, como usuário root, você precisará editar o seguinte arquivo:
vi /etc/security/limits.conf
Se você é um administrador Linux, sugiro que se familiarize com esse arquivo e com o que pode fazer com ele. Leia todos os comentários nele, pois oferece grande flexibilidade em termos de gerenciamento de recursos do sistema, limitando usuários/grupos em diferentes níveis.
As linhas que você deve adicionar levam os seguintes parâmetros:
<domain> <type> <item> <value>
Aqui está um exemplo de definição de limites flexíveis e rígidos para o usuário marin:
## Example hard limit for max opened files
marin hard nofile 4096
## Example soft limit for max opened files
marin soft nofile 1024
Pensamentos finais
Este breve artigo mostrou um exemplo básico de como verificar e configurar limites globais e de usuário para o número máximo de arquivos abertos.
Embora tenhamos apenas arranhado a superfície, recomendo fortemente que você dê uma olhada mais detalhada e leia sobre /etc/sysctl.conf e /etc/security/limits.conf e aprenda como usá-los. Eles serão de grande ajuda para você um dia.