risingwavelabs/risingwave · critical

total_memory_bytes {} is larger than the total memory availa

Error message

total_memory_bytes {} is larger than the total memory available bytes {} that can be acquired.

What it means

validate_opts in the compute node's startup path panics when opts.total_memory_bytes exceeds the total memory available on the machine (system_memory_available_bytes). RisingWave refuses to start a compute node configured to claim more memory than the host can provide, since memory accounting and reservation would be invalid.

Source

Thrown at src/compute/src/lib.rs:186

impl risingwave_common::opts::Opts for ComputeNodeOpts {
    fn name() -> &'static str {
        "compute"
    }

    fn meta_addr(&self) -> MetaAddressStrategy {
        self.meta_address.clone()
    }
}

fn validate_opts(opts: &ComputeNodeOpts) {
    let system_memory_available_bytes = system_memory_available_bytes();
    if opts.total_memory_bytes > system_memory_available_bytes {
        let error_msg = format!(
            "total_memory_bytes {} is larger than the total memory available bytes {} that can be acquired.",
            opts.total_memory_bytes, system_memory_available_bytes
        );
        tracing::error!(error_msg);
        panic!("{}", error_msg);
    }
    if opts.parallelism == 0 {
        let error_msg = "parallelism should not be zero";
        tracing::error!(error_msg);
        panic!("{}", error_msg);
    }
    let total_cpu_available = total_cpu_available().ceil() as usize;
    if opts.parallelism > total_cpu_available {
        let error_msg = format!(
            "parallelism {} is larger than the total cpu available {} that can be acquired.",
            opts.parallelism, total_cpu_available
        );
        tracing::warn!(error_msg);
    }
}

use crate::server::compute_node_serve;

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Lower total_memory_bytes in the compute node config/CLI flag to a value at or below the machine's available memory.
  2. Raise the host/container memory limit (e.g. k8s resources.limits.memory) to match the configured total_memory_bytes.
  3. Remove the explicit total_memory_bytes flag so RisingWave auto-detects available memory.
  4. Use cgroup/OS tools (free, /sys/fs/cgroup) to confirm actual available memory before configuring.

Example fix

// before
./rise compute-node --total-memory-bytes 8589934592  # 8GB on a 4GB host
// after
./rise compute-node --total-memory-bytes 3221225472  # 3GB, below the 4GB limit
Defensive patterns

Strategy: validation

Validate before calling

// Before launching the compute node, verify configured memory fits the host
total_memory_bytes = 3221225472
available = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_AVPHYS_PAGES')
assert total_memory_bytes <= available, 'total_memory_bytes exceeds available memory'

Try / catch

// Node panics at startup; wrap process launch and surface the panic message
match result {
    Err(e) if e.to_string().contains("total_memory_bytes") =>
        eprintln!("fix total_memory_bytes: must be <= available system memory"),
    Err(e) => return Err(e),
    Ok(v) => Ok(v),
}

Prevention

When it happens

Trigger: Setting total_memory_bytes (e.g. via --total-memory-bytes or config) higher than physical/available system RAM; running in a container whose cgroup limit is below the configured value; misconfigured risedev profiles or k8s resource limits.

Common situations: Kubernetes deployments where the pod memory limit was lowered but the RisingWave flag was not; copying config from a bigger machine to a smaller one; overcommitting a shared host.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/cca614832b3f6ee4. Report an issue: GitHub.