Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1396075
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: LINUX

2013-07-13 10:53:13

    虚拟内存在内核层面算是一种中间层,为了适配不同的物理内存的管理和使用方式。
    进程与内核的内存使用是通过虚拟内存管理提供的接口来实现的,虚拟内存的管理对进程是透明的。
    虚拟内存不足,一方面可能是地址空间已经耗尽了,另一种可能是虚拟内存vm_struct_area已经不够了,也表明物理内存不足。
    vm_struct_area对于开发的应用程序来说不可见。
    内核维护了进程的私有信息,也就是task_struct,这个在开发的应用程序中是看不到这些信息,应该说task_struct才是开发中的进程的超类,在task_struct中维护了应用程序哪些所谓的进程信息,而task_struct的信息是由内核维护的,可认为task_struct中有指针指向了开发的应用程序,开发得到的应用程序只是内核装载进程时要填充的信息而已,如代码段,数据段,堆栈等。
    内存泄露是指虚拟内存的泄露,本质上是只指进程占用的vm_struct_area,而这些资源都是内核的资源,当然还有其映射的物理内存,并没有释放还给内核,造成可用的系统资源越来越少了,直到进程崩溃,这些资源才会重新回收。
    内存泄露的检查还是比较难的,进程的内存使用情况可以通过/proc/pid/maps看到一些信息,然而通过查看这些信息只能大概知道发生了内存泄露,并不能定位内存泄露,毕竟内存的泄露还是由于应用程序的使用不当导致,所以还是要在应用程序中去跟踪和查找。
     对于一些预分配内存和内存池的应用程序,内存的泄露的可能性,还是比较小的。
阅读(5249) | 评论(1) | 转发(0) |
0

上一篇:内核新认识

下一篇:对交换分区的理解

给主人留下些什么吧!~~