メモリ上限を構成する

このページでは、メモリ上限の設定方法について説明します。

メモリ使用量について

許容されるメモリ上限を超える Cloud Run インスタンスは終了します。

インスタンスの使用可能なメモリは次のとおりです。

  • アプリケーション実行可能ファイルを実行する(実行可能ファイルをメモリに読み込む必要があるため)
  • アプリケーション プロセスでメモリを割り当てる
  • ファイル システムへのファイルの書き込み

デプロイされたコンテナ イメージのサイズは、使用可能なメモリにはカウントされません。

メモリ上限の設定と更新

Cloud Run のサービスとジョブには、メモリの上限を設定できます。デフォルトでは、リビジョンまたはジョブの各インスタンスに割り当てられるメモリは 512 MiB です。

必要な最小 CPU

メモリの上限を設定する場合は、次の最小 CPU が必要です。

メモリ 必要な最小 CPU
4 GiB より大きい 2
8 GiB より大きい 4
16 GiB より大きい 6
24 GiB より大きい 8

メモリの最大量

構成できるメモリの最大容量は 32 ギビバイト(32 Gi)です。

最小メモリ

最小メモリの設定は、第 1 世代または第 2 世代の実行環境を使用するかどうかによって異なります。

  • 第 1 世代は 128 MiB
  • 第 2 世代は 512 MiB

Cloud Run サービスの場合

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に設定されます。

Cloud Run サービスでは、新しいサービスを作成するとき、または新しいリビジョンをデプロイするときに、Google Cloud コンソール、gcloud コマンドライン、または YAML ファイルを使用してメモリ上限を設定できます。

コンソール

  1. Cloud Run に移動します

  2. デプロイ先の新しいサービスを構成する場合は、[サービスの作成] をクリックします。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[Container, Networking, Security] をクリックしてサービス構成ページを開きます。

  4. [コンテナ] タブをクリックします。

    画像

    • [メモリ] プルダウン リストから目的のメモリサイズを選択します。
  5. [作成] または [デプロイ] をクリックします。

コマンドライン

次のコマンドを使用して、特定のサービスのメモリ割り当てを更新します。

gcloud run services update SERVICE --memory SIZE

SERVICE はサービス名に、SIZE は必要なメモリサイズに置き換えます。サイズの書式は、固定小数点または浮動小数点の後に単位が続きます(GM はそれぞれ GB、MB を表します)。また 2 の累乗で表すこともできます(GiMi はそれぞれ GiB、MiB を表します)。

デプロイ中にメモリ制限を設定するには、次のコマンドを使用します。

gcloud run deploy --image IMAGE_URL --memory SIZE

次のように置き換えます。

  • IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。Artifact Registry を使用する場合、URL は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG という形式になります。​
  • SIZE は、上記で説明した値に置き換えます。

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. memory 属性を更新します。

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

    次のように置き換えます。

    • SERVICE は、Cloud Run サービスの名前に置き換えます。
    • IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。Artifact Registry を使用する場合、URL は REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG という形式になります。
    • SIZE は、目的のメモリサイズに置き換えます。書式は、固定小数点または浮動小数点の後に単位が続きます(GM はそれぞれ GB、MB を表します)。また 2 の累乗で表すこともできます(GiMi はそれぞれ GiB、MiB を表します)。
    • REVISION を新しいリビジョン名に置き換えるか、削除(存在する場合)します。新しいリビジョン名を指定する場合は、次の条件を満たす必要があります
      • SERVICE- で始まる
      • 小文字、数字、- のみが使用されている
      • 末尾が - ではない
      • 63 文字以内である
  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud run services replace service.yaml

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

Terraform 構成の template.spec.containers.resources.limitsgoogle_cloud_run_service リソースに次の内容を追加します。512Mi は、サービスに必要なメモリの上限に置き換えます。

resource "google_cloud_run_service" "default" {
  name     = "cloudrun-service-memory-limits"
  location = "us-central1"

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

        resources {
          limits = {
            # Memory usage limit (per container)
            # https://cloud.google.com/run/docs/configuring/memory-limits
            memory = "512Mi"
          }
        }
      }
    }
  }
  lifecycle {
    ignore_changes = [
      template[0].spec[0].containers[0].resources[0].limits,
    ]
  }
}

Cloud Run ジョブの場合

Cloud Run ジョブには 512 MiB 以上を指定する必要があります。Cloud Run ジョブのメモリを指定するには:

コンソール

  1. Cloud Run に移動します

  2. 新しいジョブを構成する場合は、[ジョブ] タブをクリックし、必要に応じて初期ジョブ設定ページを入力します。既存のジョブを構成する場合は、ジョブをクリックして [編集] をクリックします。

  3. [コンテナ、変数とシークレット、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。

  4. [コンテナ] タブをクリックします。

    画像

    • [メモリ] プルダウン リストから目的のメモリサイズを選択します。
  5. [作成] または [更新] をクリックします。

コマンドライン

  1. ジョブを作成するときにメモリ制限を設定するには:

    gcloud run jobs create JOB_NAME --image IMAGE_URL --memory SIZE

    次のように置き換えます。

    • JOB_NAME: ジョブの名前。
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/job:latest など)。
    • SIZE は、目的のメモリサイズに置き換えます。サイズの書式は、固定小数点または浮動小数点の後に単位が続きます(GM はそれぞれ GB、MB を表します)。また 2 の累乗で表すこともできます(GiMi はそれぞれ GiB、MiB を表します)。
  2. ジョブを更新するときにメモリ制限を設定するには:

    gcloud run jobs update JOB_NAME --memory SIZE

YAML

gcloud run jobs describe --format export コマンドを使用して既存のジョブ構成をダウンロードして表示します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記のフィールドを変更して、gcloud run jobs replace コマンドで変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. memory 属性を更新します。

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
          containers:
          - image: IMAGE
            resources:
              limits:
                memory: SIZE

    SIZE は、目的のメモリサイズに置き換えます。最小値は 512 Mi です。書式は、固定小数点または浮動小数点の後に単位が続きます(GM はそれぞれ GB、MB を表します)。また 2 の累乗で表すこともできます(GiMi はそれぞれ GiB、MiB を表します)。

    環境変数やメモリ上限など他の構成を指定することもできます。

  3. 既存のジョブ構成を更新します。

    gcloud run jobs replace job.yaml

サービスのメモリを最適化する

Cloud Run サービスの場合、サービスのピーク時のメモリ要件は、(標準メモリ)+(リクエストあたりのメモリ)×(サービスの同時実行)によって算定できます。

また、次の点に注意してください。

  • サービスの同時実行数を増やす場合は、ピーク時の使用状況を考慮してメモリ制限も上げる必要があります。

  • サービスの同時実行数を減らす場合は、メモリ使用量を節約するため、メモリ制限も下げることを検討してください。

リクエストごとのメモリ使用量を最小限に抑える方法については、グローバル変数に関する開発のヒントをご覧ください。

メモリ上限の設定を表示する

Cloud Run サービスの現在のメモリ上限設定を表示するには:

コンソール

  1. Cloud Run に移動します

  2. 目的のサービスをクリックして、[サービスの詳細] ページを開きます。

  3. [変更内容] タブをクリックします。

  4. 右側の詳細パネルの [コンテナ] タブに、メモリ上限設定が表示されます。

コマンドライン

  1. 次のコマンドを使用します。

    gcloud run services describe SERVICE
  2. 返された構成で、メモリ上限設定を見つけます。

Cloud Run ジョブの現在のメモリ上限設定を表示するには:

コンソール

  1. Cloud Run ジョブに移動

  2. 目的のジョブをクリックして、[ジョブの詳細] ページを開きます。

  3. [構成] タブをクリックします。

  4. 構成の詳細でメモリ上限の設定を見つけます。

コマンドライン

  1. 次のコマンドを使用します。

    gcloud run jobs describe JOB_NAME
  2. 返された構成で、メモリ上限設定を見つけます。