Вопрос

Вопрос нуба по Linux:

Если у меня 500 МБ ОЗУ и 500 МБ пространства подкачки, могут ли ОС и процессы использовать 1 ГБ памяти?

Другими словами, является ли общий объем памяти, доступной программам и ОС, суммой размера физической памяти и размера подкачки?

Я пытаюсь выяснить, какие счетчики SNMP следует запрашивать, но сначала мне нужно понять, как Linux немного лучше использует виртуальную память.

Спасибо

Это было полезно?

Решение

Да, это по сути правильно.Реальные цифры могут быть (очень) незначительно ниже, но по сути, если у вас есть x физическая память и y виртуальная память (своп в Linux), тогда у вас есть x + y память, доступная операционной системе и любым программам, работающим под ней.

Другие советы

На самом деле, по сути, это правильно, но ваша «виртуальная» память НЕ находится рядом ваша «физическая память» (как заявил Мэтью Шарли).

Ваша «виртуальная память» — это уровень абстракции, охватывающий как «физическую» (как в ОЗУ), так и «подкачиваемую» (как в жестком диске, который, конечно, такая же физическая, как и ОЗУ) память.

Виртуальная память, по сути, является уровнем абстракции.Ваша программа всегда обращается к «виртуальному» адресу, который ваша ОС преобразует в адрес в ОЗУ или на диске (который сначала необходимо загрузить в ОЗУ) в зависимости от того, где находятся данные.Таким образом, вашей программе никогда не придется беспокоиться о нехватке памяти.

Ничто уже не является таким простым...

Страницы памяти распределяются лениво.Процесс может malloc() использовать большой объем памяти и никогда ее не использовать.Итак, в вашей системе 500MB_RAM + 500MB_SWAP я мог бы - по крайней мере теоретически - выделить 2 гигабайта памяти из кучи, и все будет идти хорошо, пока я не попытаюсь использовать слишком много этой памяти.(В этот момент любой процесс, который не может получить больше страниц памяти, уничтожается.Надеюсь, это мой процесс.Но не всегда.)

Отдельные процессы могут быть ограничены 4 ГБ в качестве ограничения жесткого адреса в 32-битных системах.Даже если у вас на компьютере более 4 гигабайт оперативной памяти и вы используете эту причудливую сегментированную 36-битную схему адресации из ада, отдельные процессы все равно ограничены только 4 гигабайтами.Часть из этих 4 гигабайт приходится на общие библиотеки и программный код.Итак, вы ограничили 2-3 гигабайта стека + кучи в качестве ограничения АДРЕСАЦИИ.

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

Вы можете получить некоторые интересные вещи с разреженными данными и разреженными файлами, отображенными по мм.Я видел, как X-windows заявляли об огромном использовании памяти, хотя на самом деле она использовала совсем немного.

КСТАТИ:"бесплатно"Может помочь вам.Как могло бы»кот /proc/meminfo" или Вм линии в /proc/$PID/статус.(Особенно Вмдата и ВмСтк.) Или возможно»PS вверх $PID"

Хотя по большей части это правда, но это не так. полностью правильный.Для конкретного процесса среда, в которой вы его запускаете, может ограничивать объем памяти, доступной вашему процессу.Проверьте вывод ulimit -v также.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top