💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
💖The Start💖点点关注,收藏不迷路💖
|
📒文章目录
Linux系统中的内存管理是系统性能优化的关键环节。理解物理内存(MiB Mem)和交换空间(MiB Swap)的关系,对于系统调优、故障排查和资源规划都至关重要。本文将深入解析这两者的工作原理、交互机制和最佳实践。
1. Linux内存管理基础
1.1 物理内存(MiB Mem)的核心作用
物理内存是Linux系统中最快的存储介质,直接与CPU交互。现代Linux系统采用虚拟内存管理机制,将物理内存划分为4KB大小的页面(page)进行管理。
通过/proc/meminfo
可以查看详细的内存信息:
$ cat /proc/meminfo
MemTotal: 8023228 kB
MemFree: 1024000 kB
MemAvailable: 3048000 kB
Buffers: 124000 kB
Cached: 2800000 kB
关键指标说明:
MemTotal
:总物理内存MemFree
:完全空闲的内存MemAvailable
:实际可用的内存(包含可回收的缓存)Cached
:页面缓存使用的内存
Linux内核会将内存页面分为:
- 活跃内存:正在被进程使用的页面
- 非活跃内存:近期未被使用但可能再次使用的页面
- 可回收内存:缓存等可以释放的内存
1.2 交换空间(MiB Swap)的本质
Swap空间是当物理内存不足时,将不活跃的内存页面暂时存储到磁盘上的机制。Swap可以有两种形式:
- 交换分区:独立的磁盘分区
- 交换文件:普通文件系统上的特殊文件
创建交换文件的示例:
# 创建4GB交换文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Swap的典型使用场景:
- 作为物理内存的扩展
- 休眠(hibernate)时保存内存状态
- 处理突发的内存需求高峰
2. Mem与Swap的交互机制
2.1 内存页面的生命周期
内存页面的典型生命周期:
- 分配:进程请求内存时分配
- 使用:进程读写内存页面
- 回收:当内存不足时,内核尝试回收
- 交换:不活跃页面可能被换出到Swap
- 释放:进程结束时释放内存
内核通过swappiness
参数(0-100)控制Swap使用倾向:
# 查看当前值
cat /proc/sys/vm/swappiness
# 临时修改
sudo sysctl vm.swappiness=60
当内存严重不足时,OOM Killer会介入:
- 根据
oom_score
选择进程终止 - 可在
/var/log/kern.log
查看OOM事件
2.2 Swap使用的阈值与策略
内核使用Swap的典型时机:
- 直接内存回收失败时
- 系统空闲内存低于
watermark
阈值时 - 根据
swappiness
设置的倾向
内存压力与Swap的关系:
内存压力低 → 主要使用物理内存
内存压力中 → 开始使用Swap
内存压力高 → 频繁Swap,性能下降
内存耗尽 → OOM Killer触发
3. 性能监控与问题排查
3.1 关键监控工具的使用
free
命令显示内存概况:
$ free -h
total used free shared buff/cache available
Mem: 7.7G 3.2G 1.1G 200M 3.4G 4.0G
Swap: 2.0G 512M 1.5G
vmstat
监控内存动态:
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 524288 1024000 124000 2800000 0 0 5 2 10 15 10 5 85 0 0
3.2 常见内存问题诊断
Swap使用过高排查:
- 找出内存占用大的进程:
ps aux --sort=-%mem | head
- 检查内存泄漏:
valgrind --leak-check=full ./your_program
OOM事件分析:
grep -i oom /var/log/kern.log
4. 最佳实践与优化建议
4.1 Swap空间的配置原则
不同场景下的Swap建议:
- 桌面系统:内存大小的1-2倍
- 服务器:4GB-16GB(根据工作负载)
- 数据库服务器:谨慎使用Swap
存储介质对比:
介质类型 | 延迟 | 适合Swap |
---|---|---|
HDD | 高 | 不推荐 |
SSD | 中 | 可用 |
NVMe | 低 | 推荐 |
禁用Swap的考虑:
- 优点:避免性能波动
- 缺点:失去内存缓冲,OOM风险增加
4.2 内存调优实战案例
数据库服务器配置:
# 降低swappiness
vm.swappiness = 1
# 减少缓存压力
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
容器环境建议:
- 设置内存限制:
docker run -m 4g
- 监控cgroup内存使用:
/sys/fs/cgroup/memory/
5. 总结
核心知识点:
- Mem是主存储,Swap是备用扩展
- 通过
swappiness
平衡两者使用 - 监控工具是性能调优的基础
调优参数速查:
参数 | 建议值 | 作用 |
---|---|---|
vm.swappiness | 1-60 | Swap使用倾向 |
vm.dirty_ratio | 10-20 | 脏页最大比例 |
vm.overcommit_memory | 0/1 | 内存分配策略 |
推荐资源:
man 5 proc
(查看/proc文件系统文档)- 内核文档:`/usr/src/linux/Documentation/vm/
🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
💖The Start💖点点关注,收藏不迷路💖
|
<td width="50%">
<div align="center"><font color="#E73B3E"><em>💖The Start💖点点关注,收藏不迷路💖<em></em></em></font></div>
</td>
</tr>
</tbody>
</table>