云上的容器内存管理和 OOM 运行
Container memory management and OOMs on Cloud Run
在理解 运行 连接容器时如何计算内存利用率方面需要帮助。
假设我们有一个基于 Ubuntu 18.04 的容器,我们 运行 正在另一个 Ubuntu 18.04 中,相当相同 OS。具有以下选项 -
docker run -it -p 8080:8080 --cpus 2 --memory 2048m
现在的问题是,当我们 运行 在带有容器的本地计算机中使用相同的进程时,它在没有 OOM 的情况下工作得很好。但是,就在我们将相同的容器和进程放入其中的那一刻google 云 运行,容器内存不足。所以这里的问题是
- 如何在 google 云 运行 上计算内存使用量?
- 如果我们 运行 同一个客人 OS 在同一个主机 OS 上,我们有什么优势吗?
有没有一种方法可以通过将我们的系统更改为任何其他平台来解决这个问题,同时运行在云端运行?
在没有看到有关您的图像或应用程序的任何详细信息的情况下,很难确定,但是 Cloud 运行 和您本地计算机之间的一大区别是在 Cloud 运行、内存和“在磁盘上”文件消耗相同的配额。
来自https://cloud.google.com/run/docs/tips/general#deleting_temporary_files:
In the Cloud Run (fully managed) environment disk storage is an in-memory filesystem. Files written to disk consume memory otherwise available to your service, and can persist between invocations. Failing to delete these files can eventually lead to an out-of-memory error and a subsequent cold start.
正如@Dustin 所说,如果您 write/modify 文件到云 运行 上的本地磁盘,它将计入您的可用内存。这很可能是问题所在。
但是,如果您的代码(或您导入的模块,例如 Google 云客户端库)在笔记本电脑上与已部署的应用程序遵循不同的代码路径,这也可能是 OOM 的原因。
容器没有 运行 操作系统。基于 ubuntu:18.10
图像的容器图像不提供内存优化(或使用共享动态库缓存)。
它只会让您的应用程序使用该基础映像上可用的二进制文件和动态库,并使用该发行版的包管理器。同样,您无法控制主机云 运行 运行 上的容器。
另请注意,Cloud 运行 上的当前内存限制为 2 GB,但很快就会增加到 4 GB 左右。
在理解 运行 连接容器时如何计算内存利用率方面需要帮助。
假设我们有一个基于 Ubuntu 18.04 的容器,我们 运行 正在另一个 Ubuntu 18.04 中,相当相同 OS。具有以下选项 -
docker run -it -p 8080:8080 --cpus 2 --memory 2048m
现在的问题是,当我们 运行 在带有容器的本地计算机中使用相同的进程时,它在没有 OOM 的情况下工作得很好。但是,就在我们将相同的容器和进程放入其中的那一刻google 云 运行,容器内存不足。所以这里的问题是
- 如何在 google 云 运行 上计算内存使用量?
- 如果我们 运行 同一个客人 OS 在同一个主机 OS 上,我们有什么优势吗?
有没有一种方法可以通过将我们的系统更改为任何其他平台来解决这个问题,同时运行在云端运行?
在没有看到有关您的图像或应用程序的任何详细信息的情况下,很难确定,但是 Cloud 运行 和您本地计算机之间的一大区别是在 Cloud 运行、内存和“在磁盘上”文件消耗相同的配额。
来自https://cloud.google.com/run/docs/tips/general#deleting_temporary_files:
In the Cloud Run (fully managed) environment disk storage is an in-memory filesystem. Files written to disk consume memory otherwise available to your service, and can persist between invocations. Failing to delete these files can eventually lead to an out-of-memory error and a subsequent cold start.
正如@Dustin 所说,如果您 write/modify 文件到云 运行 上的本地磁盘,它将计入您的可用内存。这很可能是问题所在。
但是,如果您的代码(或您导入的模块,例如 Google 云客户端库)在笔记本电脑上与已部署的应用程序遵循不同的代码路径,这也可能是 OOM 的原因。
容器没有 运行 操作系统。基于
ubuntu:18.10
图像的容器图像不提供内存优化(或使用共享动态库缓存)。它只会让您的应用程序使用该基础映像上可用的二进制文件和动态库,并使用该发行版的包管理器。同样,您无法控制主机云 运行 运行 上的容器。
另请注意,Cloud 运行 上的当前内存限制为 2 GB,但很快就会增加到 4 GB 左右。