Linux 的虚拟内存(Virtual Memory)机制是一种将物理内存和磁盘空间结合使用的技术,通过内存管理单元(MMU)和操作系统协作,为每个进程提供独立的虚拟地址空间。其核心目标是扩展可用内存、隔离进程地址空间、提高内存利用率。以下是详细机制和关键组件:
每个进程拥有独立的虚拟地址空间(32位系统通常为4GB,64位系统更大),分为:
- 用户空间:进程直接使用的部分(如代码、堆、栈、共享库)。
- 内核空间:保留给内核使用,所有进程共享(通过vmalloc
等分配)。
fork()
时子进程共享父进程页,仅当写入时复制新页。当物理内存不足时,内核通过页面置换算法将不活跃的页换出到磁盘(swap分区
或swap文件
):
- LRU(Least Recently Used):优先换出最近未使用的页。
- 活跃/非活跃链表:Linux维护active_list
和inactive_list
管理页的使用频率。
- Swap缓存:避免重复写入未修改的页。
bash
free -h # 显示物理内存和Swap使用
vmstat 1 # 监控内存、Swap、缺页异常
top/htop # 进程内存占用
bash
swapon --show # 查看Swap分区
sudo swapon /dev/sdX # 启用Swap
echo "vm.swappiness=10" >> /etc/sysctl.conf # 调整Swap倾向(0-100)
bash
cat /proc/meminfo | grep PageTables
vm.swappiness
。RSS
(常驻内存)和VSZ
(虚拟内存大小)。通过虚拟内存机制,Linux实现了高效的内存隔离、扩展和共享,平衡了性能与资源利用率。理解其原理有助于优化系统配置和排查内存相关问题。