热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>内核研究>

Linux系统内存管理的重要信息总结

来源: 作者: 时间:2007-06-09 Tag: 点击:

Linux的内存管理方式比较不同,系统和用户各占两个G的虚拟地址空间,实际的限制是你的实存加上对换空间。所有的代码和所需要的数据都在这个地址空间中进行分配。未被任何进程分配的实存被用作系统的缓冲区和块设备高速缓存使用。当某些进程要求更多的内存或者新的进程开始调用程序的时候系统首先试图减少各种缓冲器的尺寸腾出空间给他们使用,当缓冲器的尺寸达到最小值的时候系统开始进行页面淘汰(LRU算法),遭到淘汰的页面是那些最近最少被使用到的页面,而不是象有些愚蠢的系统那样把整个进程对换出去。因此有些进程会部分在盘上,部分在内存。所有活动页面的集合叫做“工作集”。工作集的大小不应该超过你的实际物理内存的大小,否则会发生系统“抖动”,也就是系统不停地将页面调进调出,造成运行速度奇慢无比。:-(

有时你会发现内存已经很空了,可是对换区并没有完全释放,这是为什么呢?这个原因就是那些个页面一直没有被用到。既然没有被用到那么就让他们在盘上待着吧,尽管内存足以把它们调入但是没有理由让它们进来,那些空间作各种缓冲器用似乎更合理些。

有些写得不太好的应用程序会造成存储器的泄漏,但是那不是系统的问题而是应用程序的毛病。这类毛病的典型就是那些“客户/服务器”类型的应用。一些客户请求服务器增加内存占用但是用完后忘记或者没有能够通知服务器释放那些被占用的存储器,例如某个X客户加载新字体,用过之后没能够通知X服务器释放那些字体就退出运行了,这时候X服务器的尺寸就增加了很多,再来一次,又增加很多。最后没办法只能杀死服务器才能释放被无效占用的内存。这看上去是服务器不好,泄露存储器,但是实际上是不良客户客户造成的。(我那个中文系统目前就是这么个不良客户,所以没拿出来)道理讲了一大堆,你的问题还得具体分析。从你帖的内容上面看没有发现什么进程的尺寸变大很多。能不能把free胡结果给我看看?一般来说,在半夜的时候那个crontab要做很多的事情,包括把你的硬盘扫个遍,为你更新文件名数据库,你下回用locate PartialFfilename就会很快给出包含PartialFilename的所有文件的完整路径名。这项工作会大量占用内存,有可能改变系统的内存分配策略,如果多看几天下来没什么大的变化,例如内存不断被占用就不必在意。




相关文章:
精通initramfs构建step by step
Linux利用kexec迅速切换内核
进程上下文VS中断上下文
内核通知链 学习笔记
linux spi子系统驱动分析
menuconfig 配置选项
《Linux操作系统内核实习》之练习一
udev详解
什么叫微内核,宏内核?
Linux 信号signal处理机制
开发简单的 Linux2.6 内核模块
删除内核的perl脚本
Linux2.6内核usb gadget驱动移植
GCC hacks in the Linux kernel
iomem
kernel学习的想法
让自己的驱动支持udev
linux内核编译步骤
内核的等待队列
Linux内核wait_queue深入分析
升级和删除内核
SD卡驱动分析2
Linux Kernel VDSO本地权限提升漏洞
内核中的TCP的追踪分析-15-TCP(IPV4)的客户端与
linux 2.6内核可加载模块的编译
内核模块HelloWorld
在环回接口上发送一个数据报
ARP初始化
1分钟编译FreeBSD内核
linux设备模型之uart驱动架构分析