CentOS Stream 8的内存管理机制是什么
小樊
45
2025-12-05 15:09:02
核心机制与原理
- 采用 Linux 内核页式内存管理:以页为单位进行分配与回收,配合页表完成虚拟地址到物理地址的映射;支持按需分页与写时复制(COW)。
- 通过 LRU 等页面置换算法 回收不活跃页,优先回收 Page Cache(页缓存)、dentry(目录项缓存) 与 inode 缓存,以提升文件系统性能。
- 使用 Slab 分配器 管理内核对象缓存(如 dentry、inode 等),减少内核频繁小块分配的开销。
- 借助 kswapd 后台回收进程 与 内存压力(memory pressure) 信号触发回收,必要时进行直接回收(direct reclaim)。
- 提供 OOM Killer(Out-of-Memory Killer) 在内存极度紧张时按策略终止进程,保障系统不崩溃。
Swap 与过度提交
- 支持 Swap(交换空间):当物理内存不足时,将不活跃页换出到磁盘,缓解内存压力;可在 /etc/fstab 中配置持久化。
- 默认启用 内存过度提交(Overcommit),允许进程申请的总虚拟内存超过物理内存,提高利用率;可通过 /proc/sys/vm/overcommit_memory 调整策略。
- 提供 OOM 相关调参:如 /proc/sys/vm/oom_kill_allocating_task、/proc/sys/vm/panic_on_oom,用于控制 OOM 触发与处置方式。
缓存与回收调优参数
- vm.swappiness:控制内核使用 Swap 的倾向,默认值通常为 60;降低该值(如 10)可减少换出,提升交互与数据库类负载的稳定性。
- vm.dirty_ratio / vm.dirty_background_ratio(或对应的 *_bytes 变体):控制脏页刷盘的阈值与后台回写比例,影响写性能与突发写负载的稳定性。
- vm.vfs_cache_pressure:控制回收目录项与 inode 缓存的倾向,值越大越倾向于回收 VFS 缓存。
- vm.min_free_kbytes:设置系统保留的最小空闲内存,影响回收触发时机与低内存时的稳定性。
- 手动清理缓存(仅用于诊断或临时释放):写入 /proc/sys/vm/drop_caches 值 1/2/3 分别清理页缓存、dentry/inode 缓存或全部。
容器与虚拟化场景
- 通过 cgroups v1/v2 对进程组实施内存限制、使用统计与 OOM 策略,便于在多租户或容器化环境中隔离与控制内存资源。
- 在虚拟化环境中,可结合 大页(HugePages)/透明大页(THP) 减少 TLB Miss、提升内存访问性能;需结合负载特性与内核参数进行调优。
监控与常用命令
- 快速查看:free -h、top/htop、/proc/meminfo、/proc/vmstat、sar 等,用于观察可用内存、缓存占用、换入换出与内存压力。
- 诊断与临时处置:按需清理缓存(echo 1/2/3 > /proc/sys/vm/drop_caches)、调整 swappiness、检查 OOM 日志(如 journalctl)以定位异常进程。