Glibc 内存管理 Ptmalloc2 源代码分析 PDF 文档
项目组正在研发的一个类似数据库的 NoSql 系统,遇到了 Glibc 的内存暴增问题。现象如下:在我们的 NoSql 系统中实现了一个简单的内存管理模块,在高压力高并发环境下长时间运行,当内存管理模块的内存释放给 C 运行时库以后,C 运行时库并没有立即把内存归还给操作系统,比如内存管理模块占用的内存为 10GB,释放内存以后,通过 TOP 命令或者/proc/pid/status 查看进程占用的内存有时仍然为 10G,有时为 5G,有时为 3G,etc,内存释放的行为不确定。
目录
1. 问题.... 3
2. 基础知识............... 4
2.1 X86 平台 Linux 进程内存布局 .............. 4
2.1.1 32 位模式下进程内存经典布局 .............. 4
2.1.2 32 位模式下进程默认内存布局 .............. 5
2.1.3 64 位模式下进程内存布局 ....... 5
2.2 操作系统内存分配的相关函数 ............ 6
2.2.1 Heap 操作相关函数 .................. 6
2.2.2 Mmap 映射区域操作相关函数 7
3. 概述.... 8
3.1 内存管理一般性描述 ......... 8
3.1.1 内存管理的方法 ..... 8
3.1.2 内存管理器的设计目标 .......... 10
3.1.3 常见 C 内存管理程序 .............. 12
3.2 Ptmalloc 内存管理概述.... 13
3.2.1 简介....................... 13
3.2.2 内存管理的设计假设 .............. 14
3.2.3 内存管理数据结构概述 .......... 14
3.2.4 内存分配概述 ....... 19
3.2.5 内存回收概述 ....... 21
3.2.6 配置选项概述 ....... 22
3.2.7 使用注意事项 ....... 23
4. 问题分析及解决. 24
5. 源代码分析......... 26
5.1 边界标记法................ 26
5.2 分箱式内存管理............... 34
5.2.1 Small bins .............. 34
5.2.2 Large bins .............. 35
5.2.3 Unsorted bin.......... 40
5.2.4 Fast bins................. 42
5.3 核心结构体分析............... 44
5.3.1 malloc_state .......... 44
5.3.2 Malloc_par ............ 47
5.3.3 分配区的初始化 ... 49
5.4 配置选项. 51
5.5 Ptmalloc 的初始化............ 53
5.5.1 Ptmalloc 未初始化时分配/释放内存 ............. 53
5.5.2 ptmalloc_init()函数 .................. 55
5.5.3 ptmalloc_lock_all(),ptmalloc_unlock_all(),ptmalloc_unlock_all2() ...... 60
5.6 多分配区支持................... 65
5.6.1 Heap_info .............. 65
5.6.2 获取分配区 ........... 66
5.6.3 Arena_get2() ......... 68
5.6.4 _int_new_arena() .. 70
5.6.5 New_heap() ........... 72
5.6.6 get_free_list()和 reused_arena() ............... 75
5.6.7 grow_heap(),shrink_heap(),delete_heap(),heap_trim() ....... 77
5.7 内存分配 malloc ............... 82
5.7.1 public_mALLOc() ... 82
5.7.2 _int_malloc() ......... 83
5.8 内存释放 free ................. 116
5.8.1 Public_fREe() ....... 116
5.8.2 _int_free() ........... 118
5.8.3 sYSTRIm()和 munmap_chunk() .......... 126
下载地址:https://www.wenjiangs.com/wp-content/uploads/2022/12/NqYyx7DAaOaT1nXC.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论