Расчет% используемой памяти в Linux - PullRequest
2 голосов
/ 24 октября 2009

Linux noob вопрос:

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

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

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

Спасибо

Ответы [ 4 ]

5 голосов
/ 24 октября 2009

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

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

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

1 голос
/ 24 октября 2009

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

1 голос
/ 24 октября 2009

Нет ничего более простого ...

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

Отдельные процессы могут быть ограничены 4 гигабайтами как ограничение жесткого адреса в 32-битных системах. Даже если у вас более 4 ГБ ОЗУ на машине и вы используете эту причудливую сегментированную 36-битную жестокость от схемы адресации ада, отдельные процессы по-прежнему ограничены только 4 гигабайтами. Некоторые из этих 4 концертов должны идти на общие библиотеки и программный код. Так что до 2-3 гигабайт стека + куча в качестве ограничения адресации.

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

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

Кстати: " free " может вам помочь. Как и " cat / proc / meminfo " или Vm строк в / proc / $ PID / status . (Особенно VmData и VmStk .) Или, возможно, " ps up $ PID "

0 голосов
/ 24 октября 2009

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

...