Configurar limites de memória

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

Compreender a utilização de memória

As instâncias de contentores de publicação do Knative que excedem o respetivo limite de memória permitido são terminadas.

Os seguintes elementos são contabilizados na memória disponível da instância do contentor:

  • Executar o ficheiro executável da aplicação (uma vez que o ficheiro executável tem de ser carregado na memória)
  • Alocar memória no processo de candidatura
  • Escrever ficheiros no sistema de ficheiros

O tamanho da imagem do contentor implementada não conta para a memória disponível.

Quantidade máxima de memória

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

Otimizar a memória

Pode determinar o requisito de memória máximo para um serviço através do seguinte cálculo: (memória permanente) + (memória por pedido) * (concorrência do serviço)

Assim,

  • Se aumentar a simultaneidade do seu serviço, também deve aumentar o limite de memória para ter em conta o pico de utilização.

  • Se diminuir a simultaneidade do seu serviço, considere reduzir o limite de memória para poupar nos custos de utilização de memória.

Para mais orientações sobre como minimizar a utilização de memória por pedido, leia as Sugestões de desenvolvimento sobre variáveis globais.

Definir e atualizar limites de memória

Qualquer alteração de configuração leva à criação de uma nova revisão. As revisões subsequentes também recebem automaticamente esta definição de configuração, a menos que faça atualizações explícitas para a alterar.

Pode definir limites de memória através da Google Cloud consola, da CLI Google Cloud ou de um ficheiro YAML quando implementa um novo serviço ou atualiza um serviço existente e implementa uma revisão:

Consola

  1. Aceda ao Knative serving na Google Cloud consola:

    Aceda ao Knative Serving

  2. Clique em Criar serviço se estiver a configurar um novo serviço para o qual está a implementar. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Em Definições avançadas, clique em Contentor.

  4. Selecione o tamanho de memória pretendido na lista pendente Memória atribuída.

  5. Clique em Seguinte para continuar para a secção seguinte.

  6. Na secção Configure como este serviço é acionado, selecione a conetividade que quer usar para invocar o serviço.

  7. Clique em Criar para implementar a imagem no Knative Serving e aguarde que a implementação termine.

Linha de comandos

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

    gcloud run services update SERVICE --memory SIZE

    Substituição:

    • SERVICE com o nome do seu serviço.
    • SIZE com o tamanho da memória pretendido. O formato para o tamanho é um número de ponto fixo ou flutuante seguido de uma unidade: G, M ou K, que correspondem, respetivamente, a gigabyte, megabyte ou kilobyte, ou use os equivalentes de potência de dois: Gi, Mi, Ki, que correspondem, respetivamente, a gibibyte, mebibyte ou kibibyte.
  • Para novos serviços, defina o limite de memória executando o comando gcloud run deploy com o parâmetro --memory:

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

    Substituição:

    • SERVICE com o nome do seu serviço.
    • IMAGE_URL com uma referência à imagem do contentor, por exemplo, gcr.io/cloudrun/hello.
    • SIZE com o tamanho da memória pretendido. O formato para o tamanho é um número de ponto fixo ou flutuante seguido de uma unidade: G, M ou K, que correspondem, respetivamente, a gigabyte, megabyte ou kilobyte, ou use os equivalentes de potência de dois: Gi, Mi, Ki, que correspondem, respetivamente, a gibibyte, mebibyte ou kibibyte.

YAML

Pode transferir a configuração de um serviço existente para um ficheiro YAML com o comando gcloud run services describe usando a flag --format=export. Em seguida, pode modificar esse ficheiro YAML e implementar essas alterações com o comando gcloud run services replace. Tem de garantir que modifica apenas os atributos especificados.

  1. Transfira a configuração do seu serviço para um ficheiro denominado 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 de fornecimento do Knative.

  2. No ficheiro 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 pretendido. O formato é um número de ponto fixo ou flutuante seguido de uma unidade: G, M ou K, que correspondem a gigabyte, megabyte ou kilobyte, respetivamente, ou use os equivalentes de potência de dois: Gi, Mi, Ki, que correspondem a gibibyte, mebibyte ou kibibyte, respetivamente.

  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml