Configurar limites de memória para serviços

É possível escolher a quantidade de memória a ser fornecida para o serviço do Cloud Run. Nesta página, descrevemos como especificar a quantidade de memória disponível para o serviço.

Entender o uso da memória

As instâncias do Cloud Run que excedem o limite de memória permitido são encerradas.

A memória disponível para a instância precisa ser suficiente para:

  • Executar o executável do serviço, porque ele precisa ser carregado na memória.
  • Alocação de memória no processo de serviço
  • Como gravar arquivos no sistema de arquivos

O tamanho da imagem do contêiner implantada não afeta a memória disponível para a instância.

Definir e atualizar os limites de memória

É possível definir limites de memória nos serviços do Cloud Run. Por padrão, a memória alocada para cada instância de uma revisão é 512 MiB .

Memória necessária ao definir um valor de CPU

Ao definir um valor de CPU, a seguinte memória é necessária:

CPUs Memória necessária
0,08 vCPU Até 512 MiB
0,5 vCPU Até 1 GiB
1 vCPU Até 4 GiB
2 vCPU Até 8 GiB
4 vCPUs 2 a 16 GiB
6 vCPU 4 a 24 GiB
8 vCPUs 4 a 32 GiB
Se você usar menos de 512 MiB de memória, use o ambiente de execução de primeira geração.

Quantidade máxima de memória

A quantidade máxima de memória que você pode configurar é 32 gibibyte (32 Gi).

É possível aplicar um limite máximo de memória usando políticas personalizadas da organização.

Memória mínima

A configuração mínima de memória depende do ambiente de execução de primeira ou segunda geração:

  • 128 MiB para a primeira geração
  • 512 MiB para a segunda geração

Considerações sobre o custo

O custo do serviço do Cloud Run é afetado pela configuração de memória e pelo tempo de atividade do recurso, entre outros fatores. O provisionamento excessivo de recursos pode aumentar os custos. Para determinar qual configuração de memória é melhor para seu recurso:

  1. Estabeleça uma configuração de referência inicial.
  2. Monitore as métricas de uso da memória no Cloud Monitoring enquanto testa o sistema sob carga.
  3. Ajuste a configuração conforme necessário.

Se o uso da memória for consistentemente baixo, considere reduzir a memória alocada. Se a latência for alta e o uso da memória estiver próximo de 100%, considere aumentar a memória alocada. Se você estiver enfrentando erros de memória insuficiente (OOM), aumente a memória alocada ou modifique o aplicativo para evitar vazamentos de memória e usar menos memória. Consulte o painel do Cloud Monitoring para entender melhor o uso da memória.

Consulte os preços do Cloud Run ou estime os custos com a calculadora de preços para mais informações.

Funções exigidas

Para receber as permissões necessárias para configurar e implantar os serviços do Cloud Run, peça ao administrador para conceder a você os seguintes papéis do IAM:

Se você estiver implantando um serviço ou uma função do código-fonte, também precisará ter outros papéis concedidos no projeto e na conta de serviço do Cloud Build.

Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o serviço do Cloud Run interage com as APIs doGoogle Cloud , como as bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.

Configurar 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.

Para serviços do Cloud Run, é possível definir limites de memória usando o console do Google Cloud , a linha de comando gcloud ou um arquivo YAML ao criar um novo serviço ou implantar uma nova revisão:

Console

  1. No console do Google Cloud , acesse o Cloud Run:

    Acessar o Cloud Run

  2. Selecione Serviços no menu de navegação do Cloud Run:

    1. Se você estiver configurando um novo serviço, clique em Implantar contêiner e preencha a página de configurações de serviço inicial. Em seguida, clique em Contêineres, rede, segurança para expandir a página de configurações de serviço.

    2. Se você estiver configurando um serviço atual, clique nele.

  3. Clique na guia Contêineres.

  4. Selecione o tamanho da memória na lista Memória.

  5. Clique em Criar para um novo serviço. Clique em Visualizar as diferenças e reimplantar e em Implantar mudanças para um serviço atual.

gcloud

É possível atualizar a alocação de memória de um determinado serviço usando o comando a seguir:

gcloud run services update SERVICE --memory SIZE

Substitua SERVICE pelo nome do serviço e SIZE pelo tamanho da memória que você quer. O formato do tamanho é um número de ponto fixo ou flutuante seguido de uma unidade: G ou M correspondente a gigabyte ou megabyte, respectivamente, ou usa a potência de dois equivalentes: Gi ou Mi correspondentes a gibibyte ou mebibyte, respectivamente.

Também é possível definir limites de memória durante a implantação usando o comando:

gcloud run deploy --image IMAGE_URL --memory SIZE

Substitua:

  • IMAGE_URL: uma referência à imagem do contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL segue o formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • SIZE: os valores descritos anteriormente.

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize o atributo memory:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE
            resources:
              limits:
                memory: SIZE

    Substitua:

    • SERVICE: o nome do seu serviço do Cloud Run.
    • IMAGE_URL: uma referência à imagem do contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL segue o formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • SIZE: o tamanho de memória necessário. O formato é um número de ponto fixo ou flutuante seguido de uma unidade: G ouM correspondentes a gigabyte ou megabyte, respectivamente, ou usar a potência de dois equivalentes: Gi ouMi correspondente a gibibyte ou mebibyte, respectivamente.
    • REVISION: um novo nome de revisão ou exclua-o (se houver). Se você fornecer um novo nome de revisão, ele precisará atender aos seguintes critérios:
      • Começa com SERVICE-
      • Contém apenas letras minúsculas, números e -
      • Não termina com um -
      • Não excede 63 caracteres
  3. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

    O comando gcloud run services replace usa o arquivo service.yaml por padrão, se ele estiver presente.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na configuração do Terraform:
resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-memory-limits"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      resources {
        limits = {
          # Memory usage limit (per container)
          memory = "512Mi"
        }
      }
    }
  }
}

Em template.containers.resources.limits, substitua 512Mi pelo limite de memória necessário do serviço.

Escrever

Para especificar dicas de CPU e memória no arquivo compose.yaml, adicione o atributo cpus à definição do serviço. O Cloud Run aloca automaticamente a memória necessária ao definir um valor de CPU.

  services:
    web:
      image: IMAGE
      cpus: CPU_VALUE

Substitua:

  • IMAGE pelo URL da imagem de contêiner.
  • CPU_VALUE: o limite de CPU necessário, por exemplo, 2. Esse valor determina a memória necessária.

Implante os serviços

  1. Para implantar os serviços, execute o comando gcloud run compose up:

    gcloud run compose up compose.yaml
  2. Responda y a todas as solicitações para instalar os componentes necessários ou ativar as APIs.

  3. Opcional: torne seu serviço público se você quiser permitir o acesso não autenticado ao serviço.

Após a implantação, o URL do serviço do Cloud Run é exibido. Copie esse URL e cole-o no navegador para ver o contêiner em execução. É possível desativar a autenticação padrão no console do Google Cloud .

Otimizar a memória para serviços

Para um serviço do Cloud Run, é possível determinar o requisito de pico de memória para um serviço usando o seguinte: (memória permanente) + (memória por solicitação) * (simultaneidade de 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 da memória.

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

Ver configurações de limite de memória

Para ver as configurações atuais de limite de memória do serviço do Cloud Run:

Console

  1. No console do Google Cloud , acesse a página Serviços do Cloud Run:

    Acessar o Cloud Run

  2. Clique no serviço de seu interesse para abrir a página Detalhes do serviço.

  3. Clique na guia Contêineres para ver as configurações.

gcloud

  1. Use o comando a seguir:

    gcloud run services describe SERVICE
  2. Localizar a configuração de limite de memória na configuração retornada.