Sintomas
-
Falha na conexão remota:
Ao usar SSH ou Workbench para conectar-se à instância, a conexão é recusada ou atinge o tempo limite.
Ao fazer login via VNC, uma mensagem de System error aparece após a inserção das credenciais corretas.
-
Comportamento anormal da aplicação:
Logs da aplicação ou saídas de linha de comando exibem o erro Too many open files.
./test3.sh: redirection error: cannot duplicate fd: Too many open files ./test3.sh: line 13: /tmp/testfile_20: Too many open files Error opening file 20: Too many open files
Causa
Limite de recursos nofile muito restritivo: O parâmetro nofile no arquivo /etc/security/limits.conf define o número máximo de arquivos que um processo pode abrir. Se um processo tentar abrir mais arquivos do que esse limite permite, o sistema poderá reportar um erro ou recusar novas conexões.
Procedimento
Se for possível fazer login na instância, modifique o arquivo de configuração diretamente. Caso contrário, repare a configuração anexando o disco do sistema a outra instância.
Com acesso à instância
-
Faça login na instância ECS como usuário root.
Acesse a página ECS console - Instances. No canto superior esquerdo, selecione o grupo de recursos e a região onde a instância está localizada.
Navegue até a página de detalhes da instância desejada. Clique em Connect e selecione Workbench. Siga as instruções na tela para fazer login como root user e abrir o terminal.
-
Modifique o arquivo de configuração.
Edite o arquivo
/etc/security/limits.conf. Altere os valores dos parâmetroshard nofileesoft nofilepara o valor padrão65535. Em seguida, salve o arquivo e saia.* soft nofile 65535 * hard nofile 65535 root soft nofile 65535 root hard nofile 65535O asterisco (
*) aplica-se a todos os usuários comuns, enquantorootrefere-se ao usuário root.hard nofile: Limite máximo (hard limit) para o número de arquivos abertos. Este valor não pode exceder o limite definido pelo parâmetro de kernelfs.nr_open. Caso contrário, talvez não seja possível fazer login na instância.-
soft nofile: Limite atual (soft limit) para o número de arquivos abertos. Este valor não pode exceder o limitehard nofile. Se exceder, essa configuração será ignorada.Se o valor de
soft nofilefor maior que o valor dehard nofile, o valor efetivo denofilecorresponderá ao valor do parâmetrohard nofile.
-
Aplique a nova configuração.
Faça logout e login novamente na instância ECS com o usuário alvo para aplicar as alterações.
Execute o comando
sudo ulimit -n. Se a saída for65535, o limitenofilefoi atualizado.
Reinicie as aplicações relacionadas e verifique se funcionam normalmente.
Sem acesso à instância
Se houver um snapshot histórico do disco do sistema disponível, recomendamos primeiro criar um novo snapshot para fazer backup dos dados atuais. Depois, restaure o disco do sistema usando o snapshot histórico e verifique se a instância foi recuperada.
Caso não exista nenhum snapshot histórico, prepare uma instância Linux íntegra que esteja na mesma zona da instância com problema. Assim, você poderá alterar o parâmetro nofile anexando o disco do sistema da instância problemática à instância íntegra.
-
Desanexe o disco do sistema.
Certifique-se de que a instância com problema esteja no estado Stopped e execute as etapas a seguir:
Para evitar perda acidental de dados, crie um snapshot manual do disco do sistema.
Acesse a página ECS console - Instances. No canto superior esquerdo, selecione o grupo de recursos e a região onde a instância está localizada.
Clique no ID da instância com problema para acessar a página Instance Details. Em seguida, clique na aba Block Storage.
Na seção System Disk, localize a coluna Actions e escolha .
Na caixa de diálogo Detach Disk, confirme as informações e clique em OK. Quando o status da instância mudar para No System Disk, o disco terá sido desanexado com sucesso.
-
Anexe o disco como disco de dados a uma instância íntegra.
Garanta que a instância íntegra esteja no estado Running e realize os passos abaixo:
-
Anexe o disco do sistema da instância problemática à instância íntegra.
Clique no ID da instância íntegra para ir à sua página de detalhes.
Clique na aba Block Storage e depois em Attach Disk.
Na página Attach to Instance, selecione o disco do sistema desanexado na seção Disk e clique em Next.
Na página Partition Disk and Create and Mount File Systems, selecione Configure Later para concluir o anexo.
Clique em Connect e selecione Workbench. Siga as instruções na tela para fazer login como root user e abrir o terminal.
-
Monte o sistema de arquivos.
-
Identifique o nome da partição do disco com problema.
lsblk -fvda ├─vda1 ├─vda2 vfat 7938-FA03 /boot/efi └─vda3 ext4 root 33b46ac5-7482-4aa5-8de0-60ab4c3a4c78 / vdb ├─vdb1 ├─vdb2 vfat 7938-FA03 └─vdb3 ext4 root 33b46ac5-7482-4aa5-8de0-60ab4c3a4c78Neste exemplo, a partição raiz do disco com problema
vdbévdb3. Esta é a partição que deve ser montada. As partições são descritas da seguinte forma:vdb1/vdb2: Contêm arquivos de inicialização do sistema e podem ser ignoradas.
vdb3: Trata-se da partição raiz, contendo arquivos do sistema operacional e dados do usuário. Deve ser montada obrigatoriamente.
-
Crie um diretório e monte o sistema de arquivos.
mkdir <mount_point> && sudo mount /dev/<partition_name> <mount_point>Parâmetro
Descrição
<partition_name>Nome da partição raiz do disco com problema identificado na etapa anterior.
<mount_point>Um <ponto de montagem> personalizado deve ser um caminho vazio iniciando com
/e precisa ser único.ImportanteAo montar um sistema de arquivos em um diretório não vazio, os arquivos originais desse diretório ficam ocultos e inacessíveis. Prossiga com cautela.
Por exemplo, para montar a partição alvo
vdb3no diretório recém-criado/test, execute o comandomkdir /test && sudo mount /dev/vdb3 /test. -
Verifique o resultado da montagem.
Execute o comando
lsblk. Se a partição alvo possuir um ponto de montagem na colunaMOUNTPOINT, o sistema de arquivos foi montado com êxito.
-
-
-
Altere o arquivo de configuração.
Edite o arquivo <mount_point>/etc/security/limits.conf. Modifique os valores dos parâmetros
hard nofileesoft nofilepara o valor padrão65535. Salve o arquivo e saia.* soft nofile 65535 * hard nofile 65535 root soft nofile 65535 root hard nofile 65535O asterisco (
*) vale para todos os usuários, erootaplica-se especificamente ao usuário root.hard nofile: Define o limite rígido para arquivos abertos. Esse valor não deve ultrapassar o parâmetro de kernel<mount point>/proc/sys/fs/nr_open, sob pena de impedir o login na instância.-
soft nofile: Representa o limite atual de arquivos abertos. Não pode ser superior ao limitehard nofile, caso contrário a configuração é desconsiderada.Quando o valor de
soft nofilesupera o dehard nofile, o valor efetivo denofilepassa a ser o do parâmetrohard nofile.
-
Anexe o disco de volta à instância ECS original como disco do sistema.
-
Desmonte o sistema de arquivos.
Substitua
<mount_point>pelo ponto de montagem real.umount <mount_point>Como exemplo, execute o comando
umount /test. -
Desanexe o disco do sistema reparado.
Retorne ao ECS console e vá para a aba Block Storage na página de detalhes da instância íntegra.
Na coluna Actions referente ao disco do sistema reparado, clique em Detach.
Na caixa de diálogo Detach Disk, clique em OK.
-
Reanexe o disco do sistema reparado à instância original.
Vá até a aba Block Storage da página de detalhes da instância com problema e clique em Attach Disk.
Na página Attach to Instance, selecione o disco do sistema reparado na lista Disk. Configure as Logon Credentials e clique em Next.
Na página Partition Disk and Create and Mount File Systems, selecione Configure Later para finalizar o anexo.
Inicie a instância ECS.
-
Faça login na instância ECS original e confirme seu funcionamento normal.
Recomendações
Manipule arquivos essenciais do sistema com cuidado: Antes de editar arquivos críticos, sempre crie um snapshot manual. Compreenda bem os riscos envolvidos e faça apenas alterações estritamente necessárias.
Implemente monitoramento e alertas: Acompanhe a configuração
ulimit -nnas instâncias críticas. Comparar regularmente o valor de execução deulimit -ncom a configuração esperada permite validar limites de recursos e receber alertas sobre mudanças não autorizadas.
> Detach