Ответ
Виртуальная память — это фундаментальный механизм ядра Linux, который создаёт для каждого процесса иллюзию, что у него есть собственное большое, непрерывное и изолированное адресное пространство в оперативной памяти (RAM), даже если физической памяти меньше.
Основные цели и преимущества:
- Изоляция и безопасность: Процессы не могут напрямую обращаться к памяти друг друга или к памяти ядра. Это предотвращает случайную или злонамеренную порчу данных.
- Абстракция и упрощение программирования: Программа работает с виртуальными адресами (например, от 0x0 до 0xffff...). Ядро и аппаратура (MMU — Memory Management Unit) через таблицы страниц (page tables) транслируют эти адреса в реальные физические. Программисту не нужно заботиться о реальном расположении данных в RAM.
- Расширение доступной памяти (своппинг): Ядро может перемещать редко используемые «страницы» памяти (обычно по 4 КБ) из RAM на специальный раздел диска — swap. Это позволяет системе запускать процессы, суммарный объём памяти которых превышает размер физической RAM.
- Эффективное использование памяти: Механизмы, такие как Copy-on-Write (CoW), позволяют нескольким процессам (например, после
fork()) безопасно использовать одни и те же страницы памяти до момента записи, экономя ресурсы.
С точки зрения DevOps/администрирования:
- Мониторинг: Ключевые метрики —
free -h,vmstat,sar -r. Важно следить за swappiness и использованием swap-раздела. Высокая активность swap (si/so вvmstat) указывает на нехватку RAM и ведёт к резкому падению производительности ("thrashing"). - Настройка: Параметр ядра
vm.swappiness(от 0 до 100) регулирует склонность системы к использованию swap. Для серверов с SSD часто рекомендуют низкие значения (1-10). - Out-of-Memory (OOM): Когда физическая память и swap исчерпаны, OOM-killer принудительно завершает процессы для освобождения памяти.
Пример проверки использования памяти процесса:
# Показать виртуальную (VSZ) и резидентную (RSS) память процесса
$ ps aux | grep nginx
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1234 0.0 0.1 123456 7890 ? Ss 10:00 0:00 nginx: master process
# VSZ (Virtual Memory Size) — всё виртуальное адресное пространство процесса.
# RSS (Resident Set Size) — часть памяти процесса, которая реально находится в RAM.