docker - Cloud Run 上的容器内存管理和 OOM

标签 docker memory-management google-cloud-platform containers google-cloud-run

在了解运行容器时如何计算内存利用率方面需要帮助。
假设我们有一个基于 Ubuntu 18.04 的容器,我们在另一个 Ubuntu 18.04 中运行该容器,该操作系统是相同的。有以下选项 -

docker run -it -p 8080:8080 --cpus 2 --memory 2048m
现在这里的问题是,当我们在带有容器的本地机器上运行相同的进程时,它在没有 OOM 的情况下工作得非常好。但是,当我们将相同的容器和进程放入谷歌云运行的那一刻,容器就退出了内存。所以这里的问题是
  • google cloud run上的内存使用量是怎么计算的?
  • 如果我们在同一个主机操作系统上运行同一个客户操作系统,我们会获得什么优势吗?

  • 有没有办法通过在 cloudrun 上运行时将系统更改为任何其他平台来解决这个问题?

    最佳答案

  • 正如@Dustin 所说,如果您将文件写入/修改到 Cloud Run 上的本地磁盘,它将计入您的可用内存。这很可能是问题所在。
    但是,如果您的代码(或您导入的模块,例如 Google Cloud 客户端库)在您的笔记本电脑和已部署的应用程序上遵循不同的代码路径,这也可能是 OOM 的原因。
  • 容器不运行操作系统。您的容器镜像基于 ubuntu:18.10 image 不提供内存优化(或使用共享动态库缓存)。
    它只是让您的应用程序使用该基础镜像上可用的二进制文件和动态库,并使用该发行版的包管理器。同样,您无法控制 Cloud Run 在其上运行容器的主机。

  • 另请注意,Cloud Run 的当前内存限制为 2 GB,但很快就会增加到 4 GB。

    关于docker - Cloud Run 上的容器内存管理和 OOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62877877/

    相关文章:

    google-cloud-platform - 如何通过 Terraform 管理对 BigQuery 表的架构更改

    google-cloud-platform - 使用 terraform 将 cloud-init 脚本发送到 gcp

    docker - 如何从Docker容器重定向命令输出

    perl - perl 的 Docker 基础镜像; E : Package 'libssl1.0.0' has no installation candidate

    docker - 如何在 minikube 中创建多个集群

    c++ - block 内存的简单自定义分配器?

    mysql - 更改 Google Cloud SQL 上的 innodb_io_capacity

    java - 如何使用 jedis for Java 连接到 Docker Redis 集群实例?

    c++ - 如何删除此 Void Pointer?

    memory-management - iPhone 开发 - 为什么它使用 8MB?