HTOP понимание

Извините, новичок в Linux / Ubuntu. Я прочитал кучу htop постов здесь, но я просто хотел уточнить, что означают значения. Я запускаю 32-битную программу, и я понимаю, что примерно 4,2 - это максимальный объем памяти, который может использовать это приложение. Если я пройду через это, я получу ошибку вызова.

Глядя на htop, смотрю ли я на сумму virt или res, чтобы увидеть, когда она приближается к этому пределу в 4 ГБ?

htop image

3
задан 12 May 2019 в 22:49

1 ответ

Как указано в справочной странице htop :

M_RESIDENT (RES)

Размер резидентного набора (текст + данные + стек) процесс (т. е. размер используемой процессом физической памяти).

M_SIZE (VIRT)

Размер виртуальной памяти процесса.

Однако, RES просто показывает, что - физическая память, это никоим образом не означает, что 32-битный двоичный процесс будет ограничен 4 ГБ в общей сложности , и на самом деле, если у вас есть Расширение физического адреса , процесс может использовать больше, чем это. Физически, да, 2 32 адреса означают 4 ГБ физической ОЗУ. Согласно ответу Жиля (с моим акцентом):

32-битное ядро ​​Linux может выполнять только 32-битные процессы. В зависимости от параметров компиляции ядра каждый процесс может выделить только 1 ГБ, 2 ГБ или 3 ГБ памяти (остальное зарезервировано для ядра при обработке системных вызовов). Это количество виртуальной памяти, не связанное с какой-либо разбивкой между RAM, swap и mmapped файлами.

Также согласно ответу Рамеша на Unix & amp; Сайт Linux, процессу может быть выделено большое количество памяти:

Максимум, что процесс может адресовать , составляет 4 ГБ. Вы потенциально путаете память с адресным пространством. Процесс может иметь больше памяти, чем адресное пространство. То есть совершенно законно и довольно часто встречается в обработке видео и других приложениях, интенсивно использующих память. Процесс может быть выделен десятки ГБ памяти и поменять его в адресном пространстве и из него по желанию. В адресное пространство пользователя одновременно может входить только 2 ГБ.

Если у вас есть гараж на четыре машины в вашем доме, вы все равно можете иметь пятьдесят автомобилей. Вы просто не можете держать их всех в своем гараже. Вы должны иметь вспомогательное хранилище где-то еще, чтобы хранить как минимум 46 из них; какие машины вы держите в своем гараже, а какие - на стоянке вниз по улице - решать вам.

Подтверждено Ответом прорыва :

С точки зрения того, что адрес является «действительным», каждый процесс имеет свое уникальное адресное пространство (таким образом, реализуя виртуальный схема памяти), поэтому любой адрес технически действителен. Помните, что процесс может выделить больше памяти, чем физически доступно.

...

Виртуальный адрес для данного процесса сопоставляется с некоторым физическим оборудованием хранения (ОЗУ, диск и т. Д.), Но сопоставление выполняется во время выполнения операционной системой & amp; MMU.

Конечно, адресное пространство размером 4 ГБ подразумевает, что указатели все еще остаются 32-битными .


Кроме того, ядро ​​Linux имеет Out Of Memory Killer / Manager , который очистит и освободит память. Другими словами, не переживайте из-за ограничения в 4 ГБ, если вас беспокоит общая память процесса.

Если же мы говорим о выделении 4 ГБ в вашем коде , то в соответствии с связанным постом malloc() системный вызов будет фактически ограничен 4 ГБ выделений , Но вы можете выполнить более одного malloc() , запрашивая в общей сложности более 4 ГБ (хотя я не совсем уверен, как это работает с физическим ограничением).

Другие интересные чтения:

0
ответ дан 12 May 2019 в 22:49

Другие вопросы по тегам:

Похожие вопросы: