Как восстановить свободное место в ОЗУ?

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

---------------------------------
                        278.4 MiB
================================= 

Итак, вся система использует 278,4 МБ, но бесплатно говорит совсем другое:

# free
              total        used        free      shared  buff/cache   available
Mem:           1.8G        756M        980M         57M        131M        1.0G
Swap:          2.5G         11M        2.5G
Total:         4.3G        767M        3.4G

Итак, здесь система использует 756 МБ. Дело не в кеше и не из-за файлов tmp.

Я также пробовал:

# echo "3" > /proc/sys/vm/drop_caches

, чтобы увидеть, будет ли разница, но ничего не изменилось.

Так как освободить страницы, которые были взяты по какой-то причине? Я понятия не имею, что и почему использует это пространство, и не знаю, как его восстановить. На данный момент единственный вариант - перезагрузить машину.

Вот фото, где видно, какие процессы остались. Можете ли вы на основании этого объяснить использование ОЗУ?

enter image description here

0
08.05.2016, 22:14
1 ответ

Из-за сложности управления виртуальной памятью (все это на пользу использования наименьшего возможного объема) практически невозможно определить, сколько оперативной памяти фактически используется. См. ссылку .

Итак, что бы ни сообщал ваш скрипт python, он не будет отражать фактическое состояние.

То, что кэшируется, на самом деле бесплатно, не беспокойтесь об этом (удаление кешей на самом деле ничего не освобождает, это просто сбрасывает страницы, которые ядро ​​могло бы повторно использовать, если бы они ему понадобились).

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

Дело в том ... если ядро ​​сообщает о страницах как об использованных, они должны быть использованы для чего-то. Если вы хотите освободить некоторую память, она должна откуда-то поступать: каждый запущенный процесс, модуль и само ядро ​​могут иметь механизмы для высвобождения некоторой памяти, которая может им не понадобиться сейчас и будет перезагружена позже (это зависит от разработчиков приложений, если они увидят необходимость реализации необходимой сложности для этого). Но ядро ​​позаботится об этом, если вам действительно понадобится новая память. Он удалит кеш файловой системы, если вы запросите больше памяти, он будет подталкивать устаревшие страницы для обмена, если вы его используете, если вы используете zram или что-то в этом роде, вместо этого он сжимает страницы ... и в конце, если вы действительно не хватает места, убийца OOM найдет что-нибудь убить, чтобы предотвратить блокировку системы. Но этот процесс слишком сложен, чтобы вы думали, что знаете лучше, чем то, что происходит внутри.

2
28.01.2020, 02:48

Теги

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