Linux. Virtual memory: различия между версиями
Cless (обсуждение | вклад) (Новая страница: «Любой запущенный процесс получает собственный выделенный участок памяти. Но этот участ...») |
Cless (обсуждение | вклад) |
||
| Строка 4: | Строка 4: | ||
Таким образом размер виртуальной памяти в системе теоретически ничем не ограничен и общий ее объем может существенно превышать имеющуюся в наличии физическую память. И в этом нет ничего плохого, например, мы запустили несколько графических приложений, для работы которым требуются библиотеки Qt или GTK, но нужно ли каждый раз загружать их в память? Нет, достаточно сделать это один раз, а затем просто транслировать адреса виртуальной памяти процессов на одни и те же участки физической памяти. Но при этом каждый процесс будет думать, что у него загружена собственная копия библиотек. | Таким образом размер виртуальной памяти в системе теоретически ничем не ограничен и общий ее объем может существенно превышать имеющуюся в наличии физическую память. И в этом нет ничего плохого, например, мы запустили несколько графических приложений, для работы которым требуются библиотеки Qt или GTK, но нужно ли каждый раз загружать их в память? Нет, достаточно сделать это один раз, а затем просто транслировать адреса виртуальной памяти процессов на одни и те же участки физической памяти. Но при этом каждый процесс будет думать, что у него загружена собственная копия библиотек. | ||
= Работа с памятью = | |||
{| class="wikitable" | |||
|'''cat /proc/meminfo''' | |||
|Информация об объеме RAM, SWAP и другая информация | |||
|- | |||
|'''free -m''' | |||
|Общий объем памяти (RAM, SWAP), количество использованной, свободной памяти в МБайтах [1] | |||
|- | |||
|'''free -m -s 5''' | |||
|Вывод в других единицах — с ключами:-b байтах; -m мегабайтах; -g гигабайтах, -s запустить с заданным периодом обновления информации | |||
|- | |||
|'''<nowiki>free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2}</nowiki>''' | |||
|Расчет использования оперативной памяти | |||
|- | |||
| colspan="2" |'''Очистка кэша памяти''' | |||
|- | |||
|'''free -h''' | |||
|Посмотреть размер страничного кэша можно в последней колонке - cached | |||
|- | |||
|'''<nowiki>cat /proc/slabinfo | egrep dentry\|inode</nowiki>''' | |||
|Просмотр кэша inode и dentrie, относящихся к файловой системе. | |||
В него записываются не сами данные, а структура файловой системы, расположение файлов и папок. | |||
|- | |||
|'''sync; echo 1 > /proc/sys/vm/drop_caches''' | |||
|Очистка кэша PageCache | |||
|- | |||
|'''sync; echo 2 > /proc/sys/vm/drop_caches''' | |||
|Очистка inode и dentrie | |||
|- | |||
|'''sync; echo 3 > /proc/sys/vm/drop_caches''' | |||
|Очистка inode и dentrie и PageCache | |||
|} | |||
= Описание колонок в выводе команды free = | |||
total — общее количество памяти; | |||
used — реально использующая в данный момент и зарезервированная системой память; | |||
free — свободная память (total минус used); | |||
shared — Shared memory или Разделяемая память, можно посмотреть командой ipcs; | |||
buffers — буферы в памяти — страницы памяти, зарезервированные системой для выделения их процессам, когда они затребуют этого, так же известна как heap-memory; | |||
cached — файлы, которые недавно были использованы системой/процессами и хранящиеся в памяти на случай если вскоре они снова потребуются. | |||
[[Категория:Linux]] | [[Категория:Linux]] | ||
[[Категория:Self-education]] | [[Категория:Self-education]] | ||
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__ | __ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__ | ||
__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__ | __БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__ | ||
Версия 17:22, 5 октября 2024
Любой запущенный процесс получает собственный выделенный участок памяти. Но этот участок не отображается на доступные физические адреса, а использует виртуальное адресное пространство, которое является дополнительным слоем абстракции между процессом и физической памятью. Для сопоставления адресов между виртуальной и физической памятью используются специальные структуры - таблицы страниц.
Что это дает? Во-первых, изоляцию процессов друг от друга, каждый из них работает в собственном виртуальном адресном пространстве и не имеет доступа к памяти других процессов. Во-вторых, позволяет системе гибко управлять физической памятью, например, для неактивного процесса часть страниц может быть перенесено из оперативной памяти в пространства подкачки, но это никак не повлияет на работу самого процесса, его адресное пространство не изменится, поменяется лишь трансляция в таблице страниц. И, наконец, это позволяет экономить физическую память, так если несколько процессов используют одни и те же данные, то система может транслировать адреса виртуальных пространств на один и тот же участок физической памяти.
Таким образом размер виртуальной памяти в системе теоретически ничем не ограничен и общий ее объем может существенно превышать имеющуюся в наличии физическую память. И в этом нет ничего плохого, например, мы запустили несколько графических приложений, для работы которым требуются библиотеки Qt или GTK, но нужно ли каждый раз загружать их в память? Нет, достаточно сделать это один раз, а затем просто транслировать адреса виртуальной памяти процессов на одни и те же участки физической памяти. Но при этом каждый процесс будет думать, что у него загружена собственная копия библиотек.
Работа с памятью
| cat /proc/meminfo | Информация об объеме RAM, SWAP и другая информация |
| free -m | Общий объем памяти (RAM, SWAP), количество использованной, свободной памяти в МБайтах [1] |
| free -m -s 5 | Вывод в других единицах — с ключами:-b байтах; -m мегабайтах; -g гигабайтах, -s запустить с заданным периодом обновления информации |
| free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2} | Расчет использования оперативной памяти |
| Очистка кэша памяти | |
| free -h | Посмотреть размер страничного кэша можно в последней колонке - cached |
| cat /proc/slabinfo | egrep dentry\|inode | Просмотр кэша inode и dentrie, относящихся к файловой системе.
В него записываются не сами данные, а структура файловой системы, расположение файлов и папок. |
| sync; echo 1 > /proc/sys/vm/drop_caches | Очистка кэша PageCache |
| sync; echo 2 > /proc/sys/vm/drop_caches | Очистка inode и dentrie |
| sync; echo 3 > /proc/sys/vm/drop_caches | Очистка inode и dentrie и PageCache |
Описание колонок в выводе команды free
total — общее количество памяти; used — реально использующая в данный момент и зарезервированная системой память; free — свободная память (total минус used); shared — Shared memory или Разделяемая память, можно посмотреть командой ipcs; buffers — буферы в памяти — страницы памяти, зарезервированные системой для выделения их процессам, когда они затребуют этого, так же известна как heap-memory; cached — файлы, которые недавно были использованы системой/процессами и хранящиеся в памяти на случай если вскоре они снова потребуются.