Я бегу, top
чтобы контролировать производительность моего сервера, и 2 из моих процессов Java показывают виртуальную память до 800 МБ-1 ГБ. Это плохо?
Что означает виртуальная память?
И, кстати, у меня есть своп 1 ГБ, и это показывает, 0% используется. Так что я в замешательстве.
Процесс Java = 1 сервер Tomcat + мой собственный сервер java-демона = Ubuntu 9.10 (karmic)
linux
virtualization
memory
top
kapso
источник
источник
Ответы:
Виртуальная память даже не обязательно является памятью. Например, если процесс отображает в памяти большой файл, файл фактически сохраняется на диске, но он все еще занимает «адресное пространство» в процессе.
Адресное пространство (т. Е. Виртуальная память в списке процессов) ничего не стоит; это нереально. Что реально, так это столбец RSS (RES), который является резидентной памятью. Вот сколько вашей реальной памяти занимает процесс.
Но даже это не полный ответ. Если процесс вызывает fork (), он разделяется на две части, и обе они первоначально совместно используют все свои RSS. Таким образом, даже если бы RSS изначально был 1 ГБ, результатом после разветвления было бы два процесса, каждый с RSS 1 ГБ, но вы все равно использовали бы только 1 ГБ памяти.
Смущены еще? Вот что вам действительно нужно знать: используйте
free
команду и проверьте результаты до и после запуска вашей программы (в+/- buffers/cache
строке). Разница в том, сколько новой памяти использует ваша недавно запущенная программа.источник
smem
.java -Xmx16g RunLong
, который зарезервирует 16 ГБ памяти для процесса Java, то вVIRT
верхней части кажется, что 16 ГБ считается. В этом случае, каков тип этой 16-гигабайтной памяти, это отображенная память или ...?С верхней (1) страницы справочника:
Где RES означает резидентную память (используется физическая память).
На самом деле это не правильно (больше). Когда он говорит «swap», это также включает файлы, которые программа отображает в своем адресном пространстве, которые могут или не могут фактически потреблять реальную оперативную память. Эта память хранится в файле, но на самом деле это не подкачка.
VIRT также включает страницы, которые были выделены, но еще ни для чего не используются. Любая страница в этом состоянии сопоставляется с нулевой страницей ядра (блестящая концепция - вам следует поискать ее), поэтому она отображается в VIRT, но фактически не потребляет никакой памяти.
источник
-m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT
, Жаль, что я не могу понизить этот ответ.Я нашел это объяснение Мугурела Суманариу очень ясным:
источник
Столбец VIRT в выводе ps / top практически не имеет значения для измерения использования памяти. Не беспокойся об этом. Apache тяжелой нагрузки VIRT против RES памяти
https://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used
источник
Linux поддерживает виртуальную память, то есть использует диск в качестве расширения ОЗУ, так что эффективный объем используемой памяти соответственно увеличивается. Ядро запишет содержимое неиспользуемого в данный момент блока памяти на жесткий диск, чтобы память могла быть использована для других целей. Когда исходное содержимое снова необходимо, оно читается обратно в память. Все это сделано полностью прозрачным для пользователя; программы, работающие под Linux, видят только больший объем доступной памяти и не замечают, что их части время от времени находятся на диске. Конечно, чтение и запись на жесткий диск медленнее (в тысячу раз медленнее), чем при использовании реальной памяти, поэтому программы не работают так быстро. Часть жесткого диска, которая используется в качестве виртуальной памяти, называется пространством подкачки.
Linux может использовать либо обычный файл в файловой системе, либо отдельный раздел для пространства подкачки. Раздел подкачки быстрее, но легче изменить размер файла подкачки (нет необходимости перераспределять весь жесткий диск и, возможно, устанавливать все с нуля). Когда вы знаете, сколько места подкачки вам нужно, вам следует перейти к разделу подкачки, но если вы не уверены, вы можете сначала использовать файл подкачки, некоторое время использовать систему, чтобы вы могли почувствовать, сколько вы поменяете нужно, а затем сделать раздел подкачки, когда вы уверены в его размере.
Вы также должны знать, что Linux позволяет использовать несколько разделов подкачки и / или файлов подкачки одновременно. Это означает, что если вам иногда требуется необычный объем пространства подкачки, вы можете настроить дополнительный файл подкачки в такое время, вместо того, чтобы постоянно выделять весь объем.
Примечание по терминологии операционной системы: компьютерные науки обычно различают подкачку (запись всего процесса в пространство подкачки) и подкачку страниц (запись только частей фиксированного размера, обычно по несколько килобайт, за один раз). Пейджинг обычно более эффективен, и это то, что делает Linux, но традиционная терминология Linux в любом случае говорит об обмене.
Источник: http://www.faqs.org/docs/linux_admin/x1752.html
источник
VIRtual
Столбец top, относится к суперпространству (пространству сверхпотребления) процесса, которое процесс может фактически не занимать во время выполнения. Есть еще один столбецRESident
, который ссылается на фактическую физическую память / пространство, выделенное процессом, во время выполнения.Причину различий между ними можно понять по примеру: если процесс использует определенную библиотеку, то размер библиотеки также поможет
virtual-size
. однако, поскольку будет использоваться только часть библиотеки (то есть некоторые используемые методы), так что это поможетresident-size
.Обратитесь за дополнительной информацией
источник
«VIRT» - это просто адресное пространство, RES - это «реальная» память, но «SHR» (= совместно используемая) величина «RES» - это часть RES, которая используется совместно с другими процессами. Поэтому для большинства процессов я считаю, что вычитание SHR из RES дает вам объем памяти, который действительно относится к этому конкретному процессу.
источник