【问题标题】:Why does `/proc/meminfo` show 32GB when AWS instance has only 16GB?为什么 AWS 实例只有 16GB 时,`/proc/meminfo` 显示 32GB?
【发布时间】:2020-04-29 09:38:01
【问题描述】:

我想记录当前正在运行的实例的内存总量(或者:当前进程使用的内存和当前进程的可用内存)并使用/proc/meminfo

info = {
    i.split()[0].rstrip(":"): int(i.split()[1])
    for i in open("/proc/meminfo").readlines()
}
total_m = info["MemTotal"]

当我在本地运行它时,它会达到我的预期。当我在 Docker 容器中的 16GB AWS 实例上运行它时,它显示为 32GB。为什么会这样?

(附带问题:这应该怎么做?)

【问题讨论】:

  • edit 解释您的问题为什么您正在阅读/proc/meminfo 以及您希望阅读的什么
  • 请提供对主机环境的描述以及您在何处配置了 16GB 限制。

标签: linux amazon-web-services docker virtualization


【解决方案1】:

我想记录当前运行实例的大小

你没有为你定义什么是实例。 AFAIK 它在 AWS 和 Docker 中具有不同的含义。

当前进程使用的内存

请定义使用的内存

阅读更多关于virtual address space 的信息。 page cache 呢?

当前进程的可用内存

请定义可用内存。你知道paging 吗? shared libraries 呢?

然后,阅读与proc(5) 相关的文档。

你真的应该关心当前的process,而不是整个系统。阅读一本好的operating system 教科书和Advanced Linux Programming 书籍,以及https://www.linuxatemyram.com/

如果您关心当前进程,请使用proc(5) thru /proc/self/stat

如果您关心您的 AWS 实例,可以使用一些专有 API 来查询它们的状态。

如果您正在自动化某些系统管理任务,您应该说明哪些任务以及原因。

注意/proc/meminfo 提供系统范围的信息并与virtual memory 相关。 AWS 正在添加 hypervisor 层,Docker 也是如此,您可以在某个虚拟级别添加一些 process migration

【讨论】:

  • 谢谢你,巴西尔!我需要阅读您提供的链接。现在,我不知道这是否真的回答了我的问题(顺便说一句:为什么他的回答被否决了?)
  • “What instance”:通过 AWS Fargate 执行的任务
猜你喜欢
  • 1970-01-01
  • 2012-01-10
  • 2016-03-07
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多