Процессы когда-нибудь освобождают память sh? - PullRequest
0 голосов
/ 04 марта 2020

В современных операционных системах, таких как Linux, когда процессы фактически освобождают sh память (для других процессов)? Например, увеличивает ли один процесс, вызывающий free(), ресурс, который другой процесс может успешно malloc()?

Кажется удивительно трудным анализировать потребности памяти в наборе приложений, особенно для выполнения параллельных задач, требующих большого объема памяти. Частично из-за разделяемых библиотек (которые могут быть учтены дважды). Частично потому, что большая часть отчетов относится к виртуальной памяти (что может фактически означать адресное пространство, которое, вероятно, более распространено, чем физическая память). Также существуют различные типы распределения памяти (например, стек, куча, карты памяти). Неопределенность, может ли большой кратковременный всплеск использования памяти go быть необнаруженным данным инструментом. Неопределенность, может ли приложение уменьшить свои запросы, если системная память в дефиците. Схемы управления внутренней памятью приложения (например, cPython). Пейджинг и, возможно, своп. Фрагментация (и отдельные кучи по сравнению с мусорными группами). И так далее ...

Часто отмечается, что заявленное использование памяти приложением только увеличивается со временем. Говорят, что виртуальная память никогда не может уменьшиться (но как насчет физической памяти?) И что free() не возвращает память в ОС (действительно ли это один и тот же процесс? что может перерабатывать его?).

Что происходит, когда (скажем, Linux) процесс пытается освободить sh небольшую область памяти? Зависит ли это от того, есть ли у процесса что-то еще на той же странице? Есть ли способ отследить, сколько физической памяти процесс сделает недоступным для других процессов? Есть ли способ измерить потери физической памяти из-за прошлого использования или фрагментации?

...