虚拟地址空间
+----------+         +----------+
| Page #1  |  --->   | Frame #7 |
+----------+         +----------+
| Page #2  |  --->   | Frame #2 |
+----------+         +----------+
| Page #3  |  --->   | Frame #5 |
+----------+         +----------+

优势:

提供隔离,每个进程有独立的虚拟空间。解决物理内存不足问题,支持 Swap。3.1.3 伙伴系统 (Buddy System)

Linux 使用 伙伴系统 进行物理内存页的分配。

优点:

减少内存碎片。高效分配和回收。3.1.4 SLAB / SLUB 分配器

针对小内存对象(如 task_struct),Linux 引入 SLAB/SLUB 分配器来提高效率。

特性SLABSLUB

结构复杂度

简单

适合场景

大型系统

通用系统

默认内核选择

早期内核

新版本默认使用

类比:伙伴系统像 仓库管理整箱货物,SLAB/SLUB 则像 便利店拆分小包装,避免浪费。

3.2 Swap 与 OOM 机制3.2.1 什么是 Swap

当物理内存不足时,Linux 会将 不活跃的内存页移到 磁盘上的 Swap 空间,释放物理内存。

3.2.2 Swap 触发机制

内核根据 页面回收算法 判断是否触发 Swap。

关键参数:vm.swappiness

查看当前值:

cat /proc/sys/vm/swappiness

临时修改:

sudo sysctl -w vm.swappiness=10

永久修改:

echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf

3.2.3 kswapd 工作流程3.2.4 OOM(Out of Memory)

如果内存和 Swap 都耗尽,内核会触发 OOM Killer,选择一个进程强制杀死。

影响 OOM 的参数

Overcommit 策略/proc/sys/vm/overcommit_memory

oom_score/proc/

/oom_score数值越高,被杀掉的概率越大。

3.2.5 OOM 日志示例

当 OOM 发生时,dmesg 会输出类似日志:

Out of memory: Kill process 2345 (java) score 920 or sacrifice child
Killed process 2345 (java), UID 1000, total-vm:204800kB, anon-rss:102400kB

3.3 内存管理工具工具用途示例命令

free

总体内存和 Swap 使用情况

free -m

sar -r

内存趋势监控

sar -r 1 10

smem

进程级内存分布

smem -r

pmap

查看进程内存段

pmap

vmstat

内存、CPU、IO 综合监控

vmstat 1 5

Day 3 练习练习 1:调整 swappiness

查看当前 vm.swappiness 值:

cat /proc/sys/vm/swappiness

设置为 10,并观察 Swap 使用变化:

sudo sysctl -w vm.swappiness=10

启动内存压力工具,如 stress,观察 free -m 输出。

练习 2:模拟 OOM

使用 stress 创建内存压力:

sudo apt install stress -y
stress --vm 4 --vm-bytes 512M --timeout 60s

查看 dmesg,分析 OOM 日志。

练习 3:pmap 分析进程内存布局

查找某个进程 PID:

ps aux | grep firefox

使用 pmap 查看内存段:

pmap 

FAQ

Q:Swap 是不是越大越好?A:不是。Swap 过大只会让系统更慢,通常建议 Swap = 物理内存的 1-2 倍。

Q:如何判断 OOM 是谁导致的?A:通过 dmesg 或 /var/log/messages 中的 OOM Killer 日志,查看被杀掉的进程和 oom_score。

Q:swappiness 设置多少合适?A:桌面系统可设为 10-20;服务器可设为 0-5。

Q:Swap 对 SSD 是否有损伤?A:Swap 会产生大量写入,对 SSD 有一定损耗,但现代 SSD 一般足以承受。

最终学习目标

完成本日课程后,应该能够:

熟练解释 Linux 内存管理原理。通过 free、vmstat、pmap 等工具分析内存问题。调整 Swap 策略,理解 kswapd 和 OOM 的工作机制。定位和解决常见内存不足问题。

免责声明:本站为个人博客,博客所发布的一切修改补丁、注册机和注册信息及软件的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 访问和下载本站内容,说明您已同意上述条款。本站为非盈利性站点,VIP功能仅仅作为用户喜欢本站捐赠打赏功能,本站不贩卖软件,所有内容不作为商业行为。