Linux内存性能优化
倪朋飞
微软资深工程师,Kubernetes项目维护者
立即订阅
0 人已学习
课程目录
已完结 7 讲
01| 基础篇:Linux内存是怎么工作的?
02 | 基础篇:怎么理解内存中的Buffer和Cache?
03 | 案例篇:如何利用系统缓存优化程序的运行效率?
04 | 案例篇:内存泄漏了,我该如何定位和处理?
05 | 案例篇:为什么系统的Swap变高了(上)
06 | 案例篇:为什么系统的Swap变高了?(下)
07 | 套路篇:如何“快准狠”找到系统内存的问题?
Linux内存性能优化
登录|注册

04 | 案例篇:内存泄漏了,我该如何定位和处理?

倪鹏飞 2019-11-06
你好,我是倪朋飞。
通过前几节对内存基础的学习,我相信你对 Linux 内存的工作原理,已经有了初步了解。
对普通进程来说,能看到的其实是内核提供的虚拟内存,这些虚拟内存还需要通过页表,由系统映射为物理内存。
当进程通过 malloc() 申请虚拟内存后,系统并不会立即为其分配物理内存,而是在首次访问时,才通过缺页异常陷入内核中分配内存。
为了协调 CPU 与磁盘间的性能差异,Linux 还会使用 Cache 和 Buffer ,分别把文件和磁盘读写的数据缓存到内存中。
对应用程序来说,动态内存的分配和回收,是既核心又复杂的一个逻辑功能模块。管理内存的过程中,也很容易发生各种各样的“事故”,比如,
没正确回收分配后的内存,导致了泄漏。
访问的是已分配内存边界外的地址,导致程序异常退出,等等。
今天我就带你来看看,内存泄漏到底是怎么发生的,以及发生内存泄漏之后该如何排查和定位。
说起内存泄漏,这就要先从内存的分配和回收说起了。

内存的分配和回收

先回顾一下,你还记得应用程序中,都有哪些方法来分配内存吗?用完后,又该怎么释放还给系统呢?
前面讲进程的内存空间时,我曾经提到过,用户空间内存包括多个不同的内存段,比如只读段、数据段、堆、栈以及文件映射段等。这些内存段正是应用程序使用内存的基本方式。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux内存性能优化》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(1)

  • Jeff.Smile
    java中采用垃圾回收机制很少存在这些问题
    2019-11-23
收起评论
1
返回
顶部