Linux 内存管理 (Memory Management) 详解
在 Linux 系统中,并没有一个名为 mm 的单一标准命令,通常情况下,当提到 “mm” 时,指的是 Memory Management (内存管理) 这一内核子系统,或者是用户想要了解如何通过命令来监控和管理内存。
以下是关于 Linux 内存管理的核心概念以及用于执行内存管理任务的常用命令指南。
Linux 内存管理核心概念
在学习相关命令之前,理解以下概念至关重要:
- 虚拟内存 (Virtual Memory): 允许每个进程拥有独立的、连续的地址空间,而无需关心物理内存的实际布局。
- 物理内存 (Physical Memory): 计算机实际安装的 RAM 硬件。
- 分页 (Paging): 将内存划分为固定大小的块(通常为 4KB),称为“页 (Page)”。
- 交换空间 (Swap): 当物理内存不足时,内核将暂时不用的内存页移动到磁盘上的特定区域,以释放 RAM。
- 缓存与缓冲 (Cache & Buffers)
: 内核利用空闲内存来加速磁盘 I/O 操作,这部分内存通常在需要时会被自动释放。
常用内存监控与管理命令
要实现对内存的“管理”和“观察”,通常需要组合使用以下工具:
基础监控命令
- free: 最常用的命令,用于快速查看系统整体内存的使用情况(总内存、已用、空闲、缓存、交换空间)。
free -h: 以人类可读的格式(如 GB, MB)显示。
- top: 实时显示系统中各个进程的资源占用情况,包括 CPU 和内存。
- htop:
top的增强版,提供更直观的彩色界面、交互式操作和更详细的内存条显示。
深入分析命令
- vmstat: 报告关于进程、内存、分页、块 I/O、中断和 CPU 活动的信息。
vmstat 1: 每秒刷新一次系统统计数据。
- pmap: 用于查看特定进程的内存映射情况,可以查看进程占用了哪些内存段。
pmap <PID>: 显示指定进程的内存布局。
- smem: 一个更高级的工具,能够提供更准确的内存占用报告(例如通过 PSS – Proportional Set Size 来计算进程实际占用的内存)。
- slabtop: 用于查看内核 Slab 分配器 的使用情况,这对于排查内核级别的内存泄漏非常有用。
内核接口
- cat /proc/meminfo: 这是获取系统内存最详尽、最原始数据的方式,所有的内存管理工具(如
free)本质上都是读取这个文件的数据。
常用命令操作示例
查看整体内存使用情况
free -h
重点关注指标:
- available: 这是最重要的指标,表示在不触发交换空间的情况下,系统还能分配多少内存。
- buff/cache: 表示被内核用于加速磁盘操作的内存,这部分内存是“可回收”的。
查找内存占用最高的进程
在 top 或 htop 界面中:
- 按 M (在大写模式下) 或通过菜单选择,按 %MEM 进行排序。
查看进程的详细内存映射
pmap -x <PID>
通过此命令可以查看进程的堆 (heap)、栈 (stack) 以及加载的共享库所占用的具体内存地址和大小。
如何进行内存排查
如果你遇到了内存不足(Out of Memory)的问题,建议遵循以下步骤:
- 使用
free -h确认是 物理内存 不足还是 Swap 空间耗尽。 - 使用
top或htop找出占用内存最高的 进程 (PID)。 - 如果是系统整体缓慢,使用
vmstat 1查看是否有大量的 si (swap in) 和 so (swap out),这表明系统正在频繁进行页面交换,性能会大幅下降。 - 如果怀疑是内核问题,使用
slabtop检查内核对象占用。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/490691.html



