Просмотр использования виртуальной памяти

cat выходное содержание команды файла .ssh/id_rsa.pub; | (канал) получает этот текстовый вывод и затем отправляет (т.е. каналы) текст к ssh.

Затем ssh использование этот текст, как введено для cat >> .ssh/authorized_keys команда.

2
22.08.2013, 16:38
3 ответа

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

На практике программы имеют тенденцию выделять больше памяти, чем они используют. Например, виртуальная машина Java выделяет большую виртуальную память на запуске, но сразу не использует его. Память, считающая в ядре Linux, пытается компенсировать это путем отслеживания объема памяти, на самом деле используемого процессами, и превышает возможности объема виртуальной памяти. Другими словами, объем виртуальной памяти, выделенной ядром, может превысить объем физической памяти и области подкачки, объединенной в системе. В то время как это приводит к лучшему использованию физической памяти и области подкачки, оборотная сторона - то, что, когда сумма используемой памяти превышает объем физической памяти и доступной области подкачки, ядро должно так или иначе освободить ресурсы памяти для выполнения обязательства по выделению памяти.

Механизм ядра, который используется для исправления памяти, называют out-of-memory-killer (OOM-уничтожитель). Обычно механизм начнет избавляться от процессов "жулика" памяти-hogging к свободному память для других процессов. В некоторых средах, жизнеспособном варианте к свободной памяти и возвращают систему операции, может быть должным к перезагрузке. Для этих случаев ядро может быть настроено для паники на условии из памяти через vm.panic_on_oom установка sysctl.

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

2
27.01.2020, 22:06

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

Существует невероятно большая сумма описаний термина "Виртуальная память" онлайн, потому что это - общая тема беспорядка, это - один из них: http://en.wikipedia.org/wiki/Virtual_memory

Этот более характерен для Linux: http://www.tldp.org/LDP/tlk/mm/memory.html

0
27.01.2020, 22:06
  • 1
    В Linux стеком по умолчанию размер 10 МБ. Учитывая, что, при запуске 700 + распараллеливает вышеупомянутые данные, теоретически корректно. И от Вашего объяснения это не корректная память, используемая процессом. Можно ли предложить, чтобы некоторый механизм измерил фактическое использование виртуальной памяти для моей простой программы, начинающей это, много распараллеливает? –  Antarus 22.08.2013, 15:42
  • 2
    Значение RSS должно быть ближе к тому, что на самом деле использует Ваш процесс. Кроме того, я не уверен, можно ли действительно вычислить 700 потоков *, 10 МБ складывают размер, потому что я думаю, что ядро Linux делает копию на записи даже на стопках потока, если я не ошибаюсь. Используя копию на записи уменьшил бы объем на самом деле используемой памяти. –  replay 22.08.2013, 15:50

В качестве касательной точки, если ваши потоки созданы, и функция потока завершается после выполнения своей работы, но VmDATA продолжает увеличиваться, то у вас есть утечка памяти.

Обычно, когда функция потока завершается, pthread_exit является неявным, но ресурсы потока не освобождаются до тех пор, пока не будет выполнено pthread_join или pthread_detach. Итак, чтобы явно освободить стек потока из кучи и закрыть утечку, сделайте явный вызов для соединения или отсоединения.

1
27.01.2020, 22:06

Теги

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