Como configurar limites de memória

Saiba como definir limites para a memória usada pelas instâncias de contêiner no Knative serving.

Noções básicas sobre o uso da memória

As instâncias de contêiner do Knative serving que excedem o limite de memória permitido são encerradas.

Os itens a seguir afetam a memória disponível da instância do contêiner:

  • Abrir o executável do aplicativo (já que o executável precisa ser carregado na memória).
  • Alocar memória no processo do aplicativo.
  • Gravar arquivos no sistema.

O tamanho da imagem de contêiner implantada não afeta a memória disponível.

Quantidade máxima de memória

A quantidade máxima de memória que é possível configurar é limitada pela configuração do cluster do GKE.

Como otimizar a memória

É possível determinar o requisito de pico de memória para um serviço usando: (Memória permanente) + (Memória por solicitação) * (Simultaneidade do serviço)

Portanto:

  • se você aumentar a simultaneidade do serviço, também precisará aumentar o limite de memória para contabilizar o pico de uso;

  • se você diminuir a simultaneidade do serviço, considere reduzir o limite de memória para economizar nos custos de uso dela.

Para mais orientações sobre como minimizar o uso de memória por solicitação, leia Dicas de desenvolvimento sobre variáveis globais.

Como definir e atualizar os limites de memória

Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem automaticamente essa configuração, a menos que você faça atualizações explícitas para alterá-la.

Você pode definir limites de memória usando o Console do Cloud, a CLI do Google Cloud ou um arquivo YAML ao implantar um novo serviço ou atualizar um serviço existente e implantar uma revisão:

Console

  1. Acesse o Knative serving no console do Google Cloud:

    Acessar o Knative serving

  2. Clique em Criar serviço se estiver configurando um novo serviço em que fará uma implantação. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar uma nova revisão.

  3. Em Configurações avançadas, clique em Contêiner.

  4. Selecione o tamanho de memória que você quer na lista suspensa Memória alocada.

  5. Clique em Avançar para acessar a próxima seção.

  6. Na seção Configurar como este serviço é acionado, selecione qual conectividade você quer usar para invocar o serviço.

  7. Clique em Criar para implantar a imagem no Knative serving e aguarde até que a implantação seja concluída.

Linha de comando

  • Para os serviços existentes, atualize o limite de memória usando o comando gcloud run services update com o parâmetro --memory:

    gcloud run services update SERVICE --memory SIZE
    

    Substitua:

    • SERVICE pelo nome do serviço;
    • SIZE pelo tamanho de memória desejado. O formato para o tamanho é um número de ponto fixo ou flutuante seguido por uma unidade: G, M ou K, correspondente a gigabyte, megabyte ou kilobyte, respectivamente. Também é possível usar a potência de dois equivalentes: Gi, Mi, Ki, correspondente a gibibyte, mebibyte ou kibibyte, respectivamente.
  • Para novos serviços, defina o limite da memória executando o comando gcloud run deploy com o parâmetro --memory:

    gcloud run deploy SERVICE --image=IMAGE_URL --memory SIZE
    

    Substitua:

    • SERVICE pelo nome do serviço;
    • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, gcr.io/cloudrun/hello;
    • SIZE pelo tamanho de memória desejado. O formato para o tamanho é um número de ponto fixo ou flutuante seguido por uma unidade: G, M ou K, correspondente a gigabyte, megabyte ou kilobyte, respectivamente. Também é possível usar a potência de dois equivalentes: Gi, Mi, Ki, correspondente a gibibyte, mebibyte ou kibibyte, respectivamente.

YAML

Faça o download da configuração de um serviço existente para um arquivo YAML com o comando gcloud run services describe usando a sinalização --format=export. Em seguida, modifique o arquivo YAML e implante essas alterações com o comando gcloud run services replace. Modifique apenas os atributos especificados.

  1. Faça o download da configuração do serviço em um arquivo chamado service.yaml no espaço de trabalho local:

    gcloud run services describe SERVICE --format export > service.yaml

    Substitua SERVICE pelo nome do seu serviço do Knative serving.

  2. No seu arquivo local, atualize o atributo memory:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE_NAME
    spec:
      template:
        spec:
          containers:
    image: IMAGE_URL
            resources:
              limits:
                memory: SIZE

    Substitua SIZE pelo tamanho de memória desejado. O formato é um número de ponto fixo ou flutuante seguido por uma unidade: G, M, ou K correspondente a gigabyte, megabyte ou kilobyte, respectivamente. Ou use a potência de dois equivalentes: Gi, Mi, Ki correspondente a gibibyte, mebibyte ou kibibyte respectivamente.

  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml