Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2024-11-28 GMT+08:00

Alteração do número máximo de identificadores de arquivo

O número máximo de identificadores de arquivo é o número máximo de arquivos que podem ser abertos. No Linux, há duas restrições de identificadores de arquivos. Uma é a restrição no nível do sistema, onde o número máximo de arquivos que podem ser abertos por todos os processos do usuário ao mesmo tempo. A outra é a restrição em nível de usuário, onde o número máximo de arquivos que podem ser abertos por um único processo de usuário. Os contêineres têm a terceira restrição de identificadores de arquivo, ou seja, o número máximo de identificadores de arquivo de um único processo no contêiner.

Os comandos para modificar parâmetros do sistema de nó são válidos somente quando imagens públicas são usadas. Os comandos fornecidos neste documento são apenas para referência quando imagens privadas são usadas.

Alterar o número máximo de identificadores de arquivos em nível de sistema em um nó

  1. Faça logon no nó e verifique o arquivo /etc/sysctl.conf.

    cat /etc/sysctl.conf

  2. Modifique o parâmetro fs.file-max. fs.file-max=1048576 indica o nome do parâmetro do kernel e o valor recomendado.

    • Se o valor de fs.file-max tiver sido definido no arquivo sysctl.conf, execute o seguinte comando para alterar o valor:
      sed -i "s/fs.file-max=[0-9]*$/fs.file-max=1048576/g" /etc/sysctl.conf && sysctl -p
    • Se fs.file-max não estiver definido no arquivo sysctl.conf, execute o seguinte comando para adicioná-lo:
      echo fs.file-max=1048576 >> /etc/sysctl.conf && sysctl -p

  3. Execute os comandos a seguir para verificar se a alteração foi bem-sucedida (se o valor retornado é o mesmo que você configurou).

    # sysctl fs.file-max
    fs.file-max = 1048576

Alterar o número máximo de identificadores de arquivo para um único processo em um nó

  1. Faça logon no nó e visualize o arquivo /etc/security/limits.conf.

    cat /etc/security/limits.conf

    O número máximo de identificadores de arquivo para um único processo de um nó é especificado pelos seguintes parâmetros:

    ...
    root soft nofile 65535
    root hard nofile 65535
    * soft nofile 65535
    * hard nofile 65535

  2. Execute o comando sed para alterar o número máximo de identificadores de arquivo. No comando, 65535 é o número máximo recomendado de identificadores de arquivo. O arquivo /etc/security/limits.conf no nó EulerOS 2.3 não contém a configuração padrão relacionada a nofile. Portanto, você não pode executar o comando sed para modificar a configuração.

    sed -i "s/nofile.[0-9]*$/nofile 65535/g" /etc/security/limits.conf

  3. Faça logon no nó novamente e execute o seguinte comando para verificar se a modificação foi bem-sucedida. Se o valor retornado for o mesmo que o valor modificado, a modificação será bem-sucedida.

    # ulimit -n
    65535

Alterar o número máximo de alças de arquivo para um único processo de contêiner

  1. Faça logon no nó e visualize o arquivo /usr/lib/systemd/system/docker.service.

    • CentOS/EulerOS:
      • Nós do Docker:
        cat /usr/lib/systemd/system/docker.service
      • Nós de contêiner:
        cat /usr/lib/systemd/system/containerd.service
    • Ubuntu:
      • Nós do Docker:
        cat /lib/systemd/system/docker.service
      • Nós de containerd:
        cat /lib/systemd/system/containerd.service

    Se LimitNOFILE ou LimitNPROC estiver definido como infinity, o número máximo de identificadores de arquivo suportados por um único processo de um contêiner é 1,048,576.

    O número máximo de identificadores de arquivo para um único processo de um contêiner é especificado pelos seguintes parâmetros:

    ...
    LimitNOFILE=1048576
    LimitNPROC=1048576
    ...

  2. Execute os seguintes comandos para modificar os dois parâmetros. No comando, 1048576 é o valor recomendado para o número máximo de identificadores de arquivo.

    Alterar o número máximo de identificadores de arquivos de um contêiner reiniciará o processo docker/containerd.

    • CentOS/EulerOS:
      • Nós do Docker:
        sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /usr/lib/systemd/system/docker.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /usr/lib/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker
      • Nós de containerd:
        sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /usr/lib/systemd/system/containerd.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /usr/lib/systemd/system/containerd.service && systemctl daemon-reload && systemctl restart containerd
    • Ubuntu:
      • Nós do Docker:
        sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /lib/systemd/system/docker.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /lib/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker
      • Nós de containerd:
        sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /usr/lib/systemd/system/containerd.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /usr/lib/systemd/system/containerd.service && systemctl daemon-reload && systemctl restart containerd

  3. Verifique o número máximo de identificadores de arquivo de um único processo no contêiner. Se o valor retornado for o mesmo que o valor modificado, a modificação será bem-sucedida.

    • Nós do Docker:
      # cat /proc/`pidof dockerd`/limits | grep files
      Max open files            1048576              1048576              files   
    • Nós de containerd:
      # cat /proc/`pidof containerd`/limits | grep files
      Max open files            1048576              1048576              files   

Configurar automaticamente o número máximo de manipuladores de arquivos ao criar um nó ou pool de nós

Você pode definir o script a ser executado após a criação de um nó ou pool de nós. Ao criar um nó ou um pool de nós, você pode usar o script para configurar o número máximo de identificadores de arquivo.

  1. Confirme o sistema operacional do nó ou pool de nós a ser criado, por exemplo, CentOS 7.6.
  2. Teste manualmente os comandos de script em nós no mesmo cluster e executando o mesmo sistema operacional.

  3. Ao criar um nó ou um pool de nós, escolha Advanced Settings > Post-installation Command para adicionar comandos. (Os comandos a seguir devem ser configurados após a verificação ser bem-sucedida.)

    • Alterar o número máximo de identificadores de arquivo no nível do sistema em um nó.
      • Faça logon no nó e verifique o arquivo /etc/sysctl.conf. Se o valor de fs.file-max tiver sido definido no arquivo, execute o seguinte comando para alterá-lo:
        sed -i "s/fs.file-max=[0-9]*$/fs.file-max=1048576/g" /etc/sysctl.conf && sysctl -p
      • Faça logon no nó e verifique o arquivo /etc/sysctl.conf. Se o valor de fs.file-max não estiver definido no arquivo, execute o seguinte comando para adicioná-lo:
        echo fs.file-max=1048576 >> /etc/sysctl.conf && sysctl -p

      No comando anterior, fs.file-max=1048576 indica o nome do parâmetro do kernel e o valor recomendado.

    • Execute o seguinte comando para alterar o número máximo de identificadores de arquivo para um único processo em um nó:
      sed -i "s/nofile.[0-9]*$/nofile 65535/g" /etc/security/limits.conf

      No comando anterior, 65535 é o número máximo recomendado de identificadores de arquivo.

    • Alterar o número máximo de identificadores de arquivo para um único processo de um contêiner.
      • CentOS/EulerOS:
        sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /usr/lib/systemd/system/docker.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /usr/lib/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker
      • Ubuntu:
        sed -i "s/LimitNOFILE=[0-9a-Z]*$/LimitNOFILE=1048576/g" /lib/systemd/system/docker.service;sed -i "s/LimitNPROC=[0-9a-Z]*$/LimitNPROC=1048576/g" /lib/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker

      No comando anterior, 1048576 é o número máximo recomendado de identificadores de arquivo.

    O comando na figura a seguir é usado apenas como exemplo. Altere-o conforme necessário.

  4. Depois que o nó for criado, efetue logon no nó para verificar se os parâmetros foram modificados com êxito.