Почему `/ proc / meminfo` показывает 32 ГБ, когда AWS экземпляр имеет только 16 ГБ? - PullRequest
2 голосов
/ 29 апреля 2020

Я хотел записать общий объем памяти (альтернативно: используемая память текущим процессом и доступная память для текущего процесса) текущего запущенного экземпляра и использовал /proc/meminfo:

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

Когда Я запускаю его локально, он делает то, что я ожидаю. Когда я запускаю его на экземпляре размером 16 ГБ AWS в контейнере Docker, он показывает 32 ГБ. Почему это так?

(Дополнительный вопрос: как это сделать?)

1 Ответ

0 голосов
/ 29 апреля 2020

Я хотел записать размер текущего запущенного экземпляра

Вы не определяете, что для вас является экземпляром. AFAIK имеет другое значение в AWS и в Docker.

используемой памяти текущим процессом

Пожалуйста, определите, что используется память .

Подробнее о виртуальном адресном пространстве . Как насчет кеша страниц ?

доступной памяти для текущего процесса

Пожалуйста, определите, какая свободная память . Вам известно о пейджинге ? А как насчет общих библиотек ?

Затем прочитайте документацию, относящуюся к pro c (5) .

Вам действительно стоит позаботиться о текущем процесс , а не вся система. Прочитайте хорошую операционную систему учебник и Advanced Linux Programming книгу и https://www.linuxatemyram.com/

Если вы заботитесь о текущем процессе , используйте pro c (5) thru /proc/self/stat

Если вам небезразличны ваши AWS экземпляры, есть несколько проприетарных API для запроса их статуса.

Если вы автоматизируете некоторые задачи системного администрирования, вам следует объяснить, какие из них и почему.

Обратите внимание, что /proc/meminfo предоставляет общесистемную информацию и относится к виртуальной памяти . AWS добавляет гипервизор слоев, как и Docker, и вы можете иметь некоторую миграцию процесса на некотором виртуальном уровне.

...