当前位置:首页 > 内存 > 正文

深入理解linux内存管理

  • 内存
  • 2024-06-10 23:40:13
  • 373

一、内存管理:一文读懂Linux内存组织结构及页面布局

1.什么是记忆?

1)内存,又称主存,是CPU可以直接寻址的存储空间,由半导体器件构成;

2)内存的特点是访问速度快,有中断。计算机一般不保存数据,不是持久性设备;

2.内存的作用

1)暂时存储CPU的计算数据

2)外接硬盘等内存交换的数据

3)保证系统的稳定性和稳定性CPU计算机的高性能

1.Linux内存地址空间Linux内存管理概述

2.内存地址——用户态&内核态

3.内存地址-MMU地址转换

4.内存地址-分段机制

1)段选择符

更多Linux内核视频教程文档资料可后台私信【内核】免费获取。

内核学习网站:

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂

2)分段实施

5.内存地址-分页机制(32位)

6.用户态地址空间

7.内核态地址空间

8.进程内存空间

内存管理算法——对于那些讨厌自己管理内存的人来说是天赐之物

1.内存碎片

1)基本原理

2)如何避免内存碎片

2.合伙人体系算法-组织架构

1)理念

2)外部碎片化

3.伙伴体系算法-申请与回收

1)申请算法

2)回收算法

3)条件

4.超过4M内存如何分配?

1)为什么要限制大块内存的分配?

2)如何在内核中获取大于4M的大内存

5.合作伙伴系统-反碎片机制

1)不可移动页面

2)回收页面

算法-基本原理

1)基本概念

2)内部碎片

分配器的结构

详细参考:

经典|图解Linux内存性能优化的核心思想

8.Slab缓存

1)普通缓存

2)专用缓存

9.内核态内存池

1)基本原理

2)内核API

10.用户态内存池

1)C++示例

内存

1)什么是DMA

2)DMA信号

内存不足的时代已经过去了吗?不行,内存再充裕,也不能随意使用。

1.内存使用场景

2.用户态内存分配函数

a)如果当前连续内存块足够realloc,则只需对p的空间进行扩展,并返回p的指针地址。此时q和p指向的地址是相同的

b)如果当前连续内存块不够长,则找一个足够长的地方,分配一块新的内存q,并添加将p指向的内容复制到q,返回q。并删除p指向的内存空间

3。内核态内存分配函数

4.malloc申请内存

5.页面错误异常

6.用户进程访问内存分析

7.共享内存

1)原理

2)shm接口

1.C内存泄漏

2.C野指针

3.C资源访问冲突

4.STL迭代器失败

错误示例:如果删除当前迭代器,则迭代器将失效

正确示例:当迭代器被删除时,需要保存下一个迭代器

5。C++11智能指针

(1)原理分析:

(2)数据结构:

(3)用法:

6.C++11更小、更快、更安全

6.如何查看内存

可以通过cat/proc/slabinfo命令查看

可以通过/proc/sys/vm/drop_caches查看释放情况


二、Linux内存占用分析的几个方法,你知道几个?

在Linux系统上,密切监控内存管理是维持业务稳定性的关键。一系列内置指令可以深入了解内存状态,以确保最佳性能。以下是一些必备的工具和指标:


free命令:该命令显示内存使用情况、缓冲区,支持单位转换和连续监控。一个简单的例子将展示它的威力。
vmstat:这个长期监控工具报告内存、CPU、磁盘等的实时状态,是诊断问题的宝贵资源。
/proc/meminfo:隐藏在系统文件系统中,这个宝库提供了内存使用情况的详细数据,包括总内存、缓存和交换空间。
top/htop:实时检查内存和CPU使用情况,同时显示进程信息,对于快速发现问题非常有效。
mpstat、psaux、prstat:这些工具专注于特定的性能指标,例如CPU负载、中断数量和进程CPU时间。

监控的关键指标包括:


内存写入速度和交换区域大小(KB/秒)
磁盘读取和数量写块数
中断数和CPU上下文切换次数
用户进程和系统进程CPU时间
空闲时间(包括IO等待)

常见如果CPU负载过高(r超过CPU核心数的4倍,则可能需要进行进程优化。或者硬件资源增加了。
内存瓶颈(每秒交换次数超过200页)意味着检查您的内存使用策略考虑添加内存或启用优先级分页。
即使CPU空闲,您也应该检查内存泄漏。

使用这些工具时,应注意负载警告,这可能表明系统处于压力之下,例如当r超过CPU数量或顶部负载超过某个值时临界点。


综上所述,熟悉这些监控指标,关注系统资源的变化,可以帮助您快速发现并解决应用和硬件层面的问题,优化资源分配,保证系统稳定运行。这有助于确保。系统的。