Вопрос: Вверх - что означает размер виртуальной памяти? ... Linux / Ubuntu


Я бегаю top для мониторинга производительности моего сервера, а два из моих java-процессов показывают виртуальную память до 800 МБ-1 ГБ. Это плохо?

Что означает виртуальная память?

И, кстати, у меня своп 1 ГБ, и он показывает 0%. Поэтому я смущен.

Java process = 1 Tomcat server + мой собственный демон java Server = Ubuntu 9.10 (кармический)


96
2018-05-04 15:37


Источник


Видеть: serverfault.com/questions/48582/... - Juliano


Ответы:


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

Адресное пространство (т. Е. Виртуальная память в списке процессов) ничего не стоит; это нереально. В реальности находится столбец RSS (RES), который является резидентной памятью. Вот сколько вашей фактической памяти занимает процесс.

Но даже это не весь ответ. Если процесс вызывает fork (), он разбивается на две части, и оба из них сначала разделяют все свои RSS. Таким образом, даже если RSS был первоначально 1 ГБ, результатом после форкирования было бы два процесса, каждый из которых имел бы RSS 1 ГБ, но вы все равно бы использовали только 1 ГБ памяти.

Еще не запутались? Вот что вам нужно знать: используйте free команду и проверить результаты до и после запуска вашей программы (на +/- buffers/cache линия). Эта разница в том, насколько новый память, которую использует ваша недавно запущенная программа.


116
2018-05-05 01:17



«Проверяйте результаты до и после запуска вашей программы», альтернативно, используйте USS (Unique Set Size), как было возвращено smem, - Hubert Kario
Так что есть инструмент, который дает реальное количество используемой памяти, инструменты, которые не являются сторонними. - CMCDragonkai
@CMCDragonkai Да, бесплатно. - deviantfan
Если я запускаю java-процесс через java -Xmx16g RunLong, который зарезервировал бы память 16 ГБ для процесса Java, затем в VIRT сверху, кажется, что 16Gb подсчитано. В этом случае, каков тип этой памяти 16 ГБ, является ли отображаемая память или ...? - Eric Wang


Из верхней (1) страницы руководства:

o: VIRT  --  Virtual Image (kb)
      The  total  amount  of  virtual  memory  used  by the task.  It
      includes all code, data and shared libraries  plus  pages  that
      have been swapped out.

      VIRT = SWAP + RES.

Где RES означает память RESident (используемая физическая память).

На самом деле это неправильно (больше). Когда он говорит «своп», который также включает файлы, которые программа отобразила в свое адресное пространство, которые могут или не могут фактически потреблять реальную ОЗУ. Эта память поддерживается файлами, но на самом деле не является swap.

VIRT также включает страницы, которые были выделены, но пока ничего не используются. Любая страница в этом состоянии отображается на ядре Zero Page (блестящая концепция - вы должны ее искать), поэтому она появляется в VIRT, но на самом деле не потребляет никакой памяти.


21
2018-05-04 15:43



хорошо, что интересно, так же как VIRT = SWAP + RES, как получилось, что мое использование SWAP равно нулю, а виртуальная память для двух java-процессов близка к 1 ГБ ?? - kapso
в основном топ-шоу .... Обмен: 1048568k всего, 0k использовано, 1048568k бесплатно, 505728k кэшировано - kapso
@ user42159 Этот ответ НЕПРАВИЛЬНО! Там нет «VIRT = SWAP + RES» в человеке! -m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT, Жаль, что я не могу ответить на этот ответ. - duleshi
Этот ответ неверен. USED ​​= Res + Swap Size (из списка «Управление полями», доступ к которому осуществляется нажатием клавиши «f», когда сверху. Также с верхней страницы руководства). - Jason S


Столбец VIRT в выводе ps / top почти не имеет значения для измерения использования памяти. Не беспокойтесь об этом. Вес VIRT vs RES с большой нагрузкой

https://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used


5
2018-05-04 15:41



Спасибо, я был обеспокоен и смущен, потому что, хотя использование swap было 0%, столбец виртуальной памяти очень высок. А также у меня всего 1,7 ГБ общей физической памяти 2,7 ГБ, а виртуальная память высока? - kapso


я нашел это объяснение от Mugurel Sumanariu очень ясно:

VIRT означает виртуальный размер процесса, который является суммой   память, которую она фактически использует, память, которую она отображает в себя (для   экземпляр ОЗУ видеокарты для X-сервера), файлы на диске, которые   (в частности, разделяемые библиотеки) и память   совместно с другими процессами. VIRT представляет, сколько памяти   программа может получить доступ в настоящий момент.

RES означает размер резидента, который является точным представлением   сколько фактической физической памяти потребляется процессом. (Это также   соответствует непосредственно столбцу% MEM.) Это будет практически всегда   быть меньше размера VIRT, поскольку большинство программ зависит от C   библиотека.

SHRуказывает, какая часть размера VIRT фактически разделяется (память   или библиотеки). В случае с библиотеками это не обязательно означает   что вся библиотека является резидентом. Например, если только программа   использует несколько функций в библиотеке, отображает всю библиотеку и   будет засчитываться в VIRT и SHR, но только части библиотеки   файл, содержащий используемые функции, будет фактически загружен в   и рассчитываться в соответствии с ВИЭ.


5
2018-01-27 17:53





Linux поддерживает виртуальную память, то есть, используя диск в качестве расширения ОЗУ, чтобы соответственно увеличивался эффективный размер полезной памяти. Ядро будет записывать содержимое оставшегося неиспользуемого блока памяти на жесткий диск, чтобы память могла использоваться для других целей. Когда исходное содержимое необходимо снова, они считываются обратно в память. Все это делается полностью прозрачным для пользователя; программы, работающие под Linux, только видят больший объем доступной памяти и не замечают, что части их постоянно находятся на диске. Конечно, чтение и запись жесткого диска происходит медленнее (порядка тысячи раз медленнее), чем при использовании реальной памяти, поэтому программы работают не так быстро. Часть жесткого диска, которая используется в качестве виртуальной памяти, называется пространством подкачки.

Linux может использовать либо обычный файл в файловой системе, либо отдельный раздел для пространства подкачки. Раздел подкачки работает быстрее, но проще изменить размер файла подкачки (нет необходимости переделывать весь жесткий диск и, возможно, устанавливать все с нуля). Когда вы знаете, сколько пространства подкачки вам нужно, вы должны пойти на раздел подкачки, но если вы не уверены, вы можете сначала использовать файл подкачки, используйте систему некоторое время, чтобы вы могли понять, сколько вы меняете необходимо, а затем создать раздел подкачки, если вы уверены в его размере.

Вы также должны знать, что Linux позволяет одновременно использовать несколько разделов подкачки и / или свопировать файлы. Это означает, что, если вы только время от времени нуждаетесь в необычном количестве пространства подкачки, вы можете настроить дополнительный файл подкачки в такие моменты, вместо того, чтобы все время выделять всю сумму.

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

Источник: http://www.faqs.org/docs/linux_admin/x1752.html


2
2018-05-04 15:43



Этот ответ распространяет ошибочное представление о том, что виртуальная память такая же, как и подкачка или пейджинг. Использование диска в качестве расширения ОЗУ предшествует виртуальной памяти. И существует множество систем (таких как большинство маршрутизаторов SoHo), которые имеют виртуальную память, но не используют диск в качестве расширения ОЗУ. (И это не ответ на вопрос ОП, так как он не использует обмен.) - David Schwartz


VIRtual столбец верхнего уровня, относится к суперпространству (пространство суперпотребления) процесса, которое процесс, возможно, фактически не принимает во время выполнения. Существует еще одна колонка RESident, который ссылается на фактическую физическую память / пространство, выделенную процессом, во время выполнения.

Причину разницы между ними можно понять на примере: если процесс использует определенную библиотеку, то размер библиотеки также поможет virtual-size, однако, поскольку будет использоваться только часть библиотеки (т. е. некоторые используемые методы), так что это поможет resident-size,

См. Больше информации


2
2018-02-26 14:27





«VIRT» - просто адресное пространство, RES - «реальная» память, но «SHR» (= общая) сумма «RES» является частью RES, которая совместно используется другими процессами. Поэтому для большинства процессов я считаю, что вычитание SHR из RES дает вам объем памяти, который действительно относится к этому конкретному процессу.


0
2018-04-18 23:03