Peter Vient Cipriano
12/16/2025, 11:11 AMkapa.ai
12/16/2025, 11:12 AMJOB_MAIN_CONTAINER_MEMORY_REQUEST / JOB_MAIN_CONTAINER_MEMORY_LIMIT when running via Docker/Kubernetes).[[Low memory footprint](https://discuss.airbyte.io/t/1399); [Scaling variables](https://discuss.airbyte.io/t/995); [Scaling Airbyte](https://docs.airbyte.com/platform/operator-guides/scaling-airbyte#what-to-scale)] - Apply Docker/Kubernetes resource constraints on worker containers so they cannot exhaust the whole node’s RAM (accepting that overly low limits may cause Java OOM in the job rather than bringing down the node).[[RAM increasing](https://discuss.airbyte.io/t/1083)] However, the knowledge sources do not provide a concrete fix or configuration that guarantees Postgres→BigQuery syncs will cap memory safely at some given number for a specific table size, nor do they confirm a resolved bug that exactly matches your scenario. They mainly: - Acknowledge high/ever-growing RAM has occurred in practice. - Suggest that this may be a bug or memory leak in some connectors. - Recommend opening a GitHub issue with full logs for deeper investigation.[[Unusual RAM usage](https://discuss.airbyte.io/t/2167); [Cockroach OOM](https://discuss.airbyte.io/t/1261)] Given that limitation, the best supported next steps based on the sources are: 1. Constrain job memory at the connector/worker level via the documented resource settings (JOB_MAIN_CONTAINER_MEMORY_LIMIT, Kubernetes pod limits) so a single job cannot consume the entire node, accepting that a too-low limit may cause that job to fail with OOM instead of crashing the node.[[Low memory footprint](https://discuss.airbyte.io/t/1399); [RAM increasing](https://discuss.airbyte.io/t/1083)] 2. Check if memory usage is concentrated in the worker / connector pod, as other users have done, to confirm which container is responsible.[[RAM increasing](https://discuss.airbyte.io/t/1083)] 3. If memory is clearly disproportionate (as in your 1.6 GB → 30 GB case), **open a GitHub issue with logs and details**; similar cases have been treated as potential memory leaks and investigated by the team.[[Cockroach OOM](https://discuss.airbyte.io/t/1261); [Unusual RAM usage](https://discuss.airbyte.io/t/2167)] The knowledge sources do not contain more specific tuning advice or a confirmed patch that would directly resolve your exact behavior.Peter Vient Cipriano
12/16/2025, 11:16 AMglobal:
auth:
enabled: true
jobs:
resources:
limits:
cpu: "3"
memory: "6Gi"kapa.ai
12/16/2025, 11:16 AMkapa.ai
12/16/2025, 11:16 AMkapa.ai
12/16/2025, 11:16 AMvalues.yaml are typically set under global.jobs.resources for the Helm chart, and/or via global.env_vars to map to the JOB_MAIN_CONTAINER_* environment variables that Airbyte uses internally.[[Configuring resources](https://docs.airbyte.com/platform/operator-guides/configuring-connector-resources); [K8s OOM issue](https://github.com/airbytehq/airbyte/issues/48816)] The docs only show partial examples and refer you to the full chart on GitHub for the complete values.yaml structure.[[Values.yaml ref](https://docs.airbyte.com/platform/deploying-airbyte/values)] They do not provide a single canonical full values.yaml block for your exact case (Postgres→BigQuery, 30 GB node), so the following is a pattern derived from the examples, not a guarantee of optimal values. A minimal example extending your current snippet, wiring job resource limits and the corresponding env vars: yaml global: auth: enabled: true # Default job pod resources (all jobs) – Helm chart v1/v2 pattern jobs: resources: requests: cpu: "1" # example memory: "2Gi" # example limits: cpu: "3" memory: "8Gi" # example # Environment variables consumed by Airbyte to set per-job container limits env_vars: JOB_MAIN_CONTAINER_CPU_REQUEST: "1" JOB_MAIN_CONTAINER_CPU_LIMIT: "3" JOB_MAIN_CONTAINER_MEMORY_REQUEST: "2Gi" JOB_MAIN_CONTAINER_MEMORY_LIMIT: "8Gi" # Optional: per‑job‑type overrides shown in the GitHub issue example CHECK_JOB_MAIN_CONTAINER_CPU_REQUEST: "1" CHECK_JOB_MAIN_CONTAINER_CPU_LIMIT: "3" CHECK_JOB_MAIN_CONTAINER_MEMORY_REQUEST: "2Gi" CHECK_JOB_MAIN_CONTAINER_MEMORY_LIMIT: "8Gi" DISCOVER_JOB_MAIN_CONTAINER_CPU_REQUEST: "1" DISCOVER_JOB_MAIN_CONTAINER_CPU_LIMIT: "3" DISCOVER_JOB_MAIN_CONTAINER_MEMORY_REQUEST: "2Gi" DISCOVER_JOB_MAIN_CONTAINER_MEMORY_LIMIT: "8Gi" SPEC_JOB_MAIN_CONTAINER_CPU_REQUEST: "1" SPEC_JOB_MAIN_CONTAINER_CPU_LIMIT: "3" SPEC_JOB_MAIN_CONTAINER_MEMORY_REQUEST: "2Gi" SPEC_JOB_MAIN_CONTAINER_MEMORY_LIMIT: "8Gi" # Optional sidecar tuning, from the same issue example SIDECAR_MAIN_CONTAINER_CPU_REQUEST: "250m" SIDECAR_MAIN_CONTAINER_CPU_LIMIT: "500m" SIDECAR_MAIN_CONTAINER_MEMORY_REQUEST: "256Mi" SIDECAR_MAIN_CONTAINER_MEMORY_LIMIT: "512Mi" This structure matches: - Instance‑wide resource env vars as documented: JOB_MAIN_CONTAINER_CPU_REQUEST, JOB_MAIN_CONTAINER_MEMORY_LIMIT, etc.[[Configuring connector resources](https://docs.airbyte.com/platform/operator-guides/configuring-connector-resources)] - The global.env_vars pattern from the closed Kubernetes OOM issue, where these env vars are set in values.yaml.[[K8s OOM issue](https://github.com/airbytehq/airbyte/issues/48816)] Because the docs explicitly say to “see full example on GitHub” for the chart’s values.yaml, you should cross‑check this structure and adjust the actual numbers (Gi/Mi, m CPUs) to match your workload and node size using the current chart version you deploy.[[Values.yaml ref](https://docs.airbyte.com/platform/deploying-airbyte/values)]kapa.ai
12/16/2025, 11:16 AMJOB_MAIN_CONTAINER_* env vars under global.env_vars (Helm chart v1), or via global.workloads.resources.mainContainer.* (Helm chart v2 “Next”).[[Config connector resources](https://docs.airbyte.com/platform/operator-guides/configuring-connector-resources#configuring-instance-wide-requirements); [Upgrade to chart v2](https://docs.airbyte.com/platform/next/deploying-airbyte/chart-v2-community#update-your-valuesyaml-file)] Since your current values.yaml already uses global.jobs.resources, here is a minimal example extending it with the recommended instance‑wide env vars (Helm v1 style): yaml global: auth: enabled: true # Instance-wide job container resources (applied to all jobs, unless overridden) env_vars: JOB_MAIN_CONTAINER_CPU_REQUEST: "3" JOB_MAIN_CONTAINER_CPU_LIMIT: "3" JOB_MAIN_CONTAINER_MEMORY_REQUEST: "6Gi" JOB_MAIN_CONTAINER_MEMORY_LIMIT: "6Gi" # (Optional legacy block, often present in chart v1 – does NOT directly control pod limits # unless wired to env vars as above) jobs: resources: requests: cpu: "3" memory: "6Gi" limits: cpu: "3" memory: "6Gi" If you are on Helm chart v2 (Next), the documented mapping is instead: yaml global: auth: enabled: true workloads: resources: mainContainer: cpu: request: "3" limit: "3" memory: request: "6Gi" limit: "6Gi" In both cases you can then use connector‑/connection‑specific overrides via the resource_requirements mechanism if needed.[[Config connector resources](https://docs.airbyte.com/platform/operator-guides/configuring-connector-resources#configuring-connector-definition-requirements)]Peter Vient Cipriano
12/16/2025, 11:17 AMkapa.ai
12/16/2025, 11:17 AMkapa.ai
12/16/2025, 11:17 AMglobal.jobs.resources but via global.workloads.resources.mainContainer.*, which is also the documented replacement for the JOB_MAIN_CONTAINER_* env vars.[\[chart v2 mapping\]](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#update-your-valuesyaml-file) So, starting from your current snippet: yaml global: auth: enabled: true jobs: resources: limits: cpu: "3" memory: "6Gi" you should instead use: yaml global: auth: enabled: true # Chart v2: instance‑wide job main container resources workloads: resources: mainContainer: cpu: request: "3" limit: "3" memory: request: "6Gi" limit: "6Gi" The docs show that: - JOB_MAIN_CONTAINER_CPU_REQUEST → global.workloads.resources.mainContainer.cpu.request - JOB_MAIN_CONTAINER_CPU_LIMIT → global.workloads.resources.mainContainer.cpu.limit - JOB_MAIN_CONTAINER_MEMORY_REQUEST → global.workloads.resources.mainContainer.memory.request - JOB_MAIN_CONTAINER_MEMORY_LIMIT → global.workloads.resources.mainContainer.memory.limit [\[chart v2 mapping\]](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#update-your-valuesyaml-file) global.jobs.resources is still present in the chart values file but is effectively legacy; an open issue notes that global.jobs.resources is not used in v2 and the configuration lives under global.workloads.resources.* instead.[\[helm v2 jobs.resources issue\]](https://github.com/airbytehq/airbyte/issues/65515)