Когда я запускаю php-скрипт и делаю ps aux
и имею огромное количество для VSZ
, около 450MB. В то время как RSS - размер резидентного набора - составляет около 10 МБ. Из википедии размер резидентного набора - is the portion of a process's memory that is held in RAM
. Но включает ли размер виртуальной памяти память, хранящуюся где-то еще, например в файловой системе? Из чего именно состоит виртуальная память?
2 ответа
Виртуальная память (как следует из названия) - это абстракция над базовой архитектурой физической памяти. Каждый процесс получает свое собственное виртуальное адресное пространство, и когда виртуальные адреса являются доступами, они сначала преобразуются в аппаратные адреса с помощью модуля управления памятью (MMU). Данные в виртуальном адресном пространстве процесса могут находиться либо в основной памяти, на диске, либо в другой, либо в какой-либо другой внешней памяти. Однако каждая страница, которая еще не находится в основной памяти (ММ), загружается в ММ, когда к ним обращается процесс. Таким образом, процессы не читают напрямую с диска, но некоторые или большинство их ресурсов могут находиться во внешней памяти в любой момент времени, поскольку страницы могут быть заменены, чтобы освободить место для других.
Виртуальная память может быть:
- в оперативной памяти, если к данным обращались недавно или если нет необходимости освобождать оперативную память
- в области подкачки (раздел подкачки или файл подкачки), если он был разбит на страницы
- в файловой системе, если данные соответствуют отображенным в память файлам (например, разделяемые библиотеки)
- нигде (т.е. не использовать ресурсы, особенно в системах с чрезмерным выделением памяти, таких как Linux), если выделенные страницы еще не были доступны
Четвертый пункт часто упускается из виду.