LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2397|回复: 21

关于debian的内存管理

[复制链接]
发表于 2006-3-14 10:52:58 | 显示全部楼层 |阅读模式
我发觉在下载东西,如果下载速度过快(比如4or5M),debian内存使用会很大,而且下载完成后可使用的内存量也没有回收,感觉就是那些内存没有被释放。

在这里请教下对linux内核有研究的朋友,是不是linux内存管理上有缺陷?
发表于 2006-3-14 11:02:16 | 显示全部楼层
真有这种情况?
我经常的下载或上传速度都在9M左右,只是我没有查看内存占用情况!
回复 支持 反对

使用道具 举报

发表于 2006-3-14 11:49:08 | 显示全部楼层
可能是系统缓存,下载的东西先放到内存里然后再一次写入硬盘,这也是碎片少的原因
回复 支持 反对

使用道具 举报

发表于 2006-3-14 22:11:18 | 显示全部楼层
Post by debianor
我发觉在下载东西,如果下载速度过快(比如4or5M),debian内存使用会很大,而且下载完成后可使用的内存量也没有回收,感觉就是那些内存没有被释放。

在这里请教下对linux内核有研究的朋友,是不是linux内存管理上有缺陷?


linux的内存管理机制和windows是不同的,即使你不运行很大的程序,内核也会把可用的物理内存提前分配,大部分主要用来做缓存,这样可以缩短经常使用的程序的启动时间。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-15 09:46:04 | 显示全部楼层
我发现debian下面如果运行某个程序时内存被多占用了一点,关闭这个程序后,内存使用仍然是那么多。好像没有释放。
回复 支持 反对

使用道具 举报

发表于 2006-3-15 13:46:06 | 显示全部楼层
Post by debianor
我发现debian下面如果运行某个程序时内存被多占用了一点,关闭这个程序后,内存使用仍然是那么多。好像没有释放。



我也有这种情况,通常体现在swap上更明显,如果前面运行某个程序占用了大量的swap空间,退出后空间还是没释放
回复 支持 反对

使用道具 举报

发表于 2006-3-15 15:57:53 | 显示全部楼层
free -m 看看,启动firefox打开十几个页面再对比一下看看,是有区别的。
缓存或swap确有楼上说的情况。是不是它根本就不用释放,而是用到的时候直接重写呢?
内核都2.6.15,绝对不会是bug
回复 支持 反对

使用道具 举报

发表于 2006-3-16 11:52:46 | 显示全部楼层
Linux对内存的使用就是-不浪费。
不会象Windows一样告诉你,还有很多空闲的内存。如果内存有多的,为什么不用呢?
程序调进内存时,会使用到很多动态库,程序退出后,动态库并没有释放,因为不缺内存,而这些动态库还可能被以后的程序使用,为什么要释放它呢?在需要内存的时候,内核会直接把不需要的动态库占用的内存分配出去。只是看起来好象内存不够用,其实是你有多少它用多少,这是俺的理解。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-16 12:59:36 | 显示全部楼层
Post by waq
Linux对内存的使用就是-不浪费。
不会象Windows一样告诉你,还有很多空闲的内存。如果内存有多的,为什么不用呢?
程序调进内存时,会使用到很多动态库,程序退出后,动态库并没有释放,因为不缺内存,而这些动态库还可能被以后的程序使用,为什么要释放它呢?在需要内存的时候,内核会直接把不需要的动态库占用的内存分配出去。只是看起来好象内存不够用,其实是你有多少它用多少,这是俺的理解。


对于你的说法我不敢苟同。

现代操作系统要花很大的工夫来考虑资源的共享,包括宝贵的CPU,内存等硬件资源,现代程序设计中也相当强调在程序退出时要释放所占用的资源(其中很大程度上是内存资源),这也是操作系统内存管理所要完成的重要功能之一。

而你居然还理直气壮地说“……为什么要释放……”。程序既然已经执行完,它占的资源,包括内存当然应该要释放!除非硬件资源已经是“足够”用了──无论什么程序执行完它所占用的资源不用释放,其它程序需要的话用你的“无限”的资源继续分配就可以了。但是这样可能吗??
回复 支持 反对

使用道具 举报

发表于 2006-3-16 14:17:52 | 显示全部楼层
Post by debianor
现代程序设计中也相当强调在程序退出时要释放所占用的资源(其中很大程度上是内存资源),这操作系统内存管理所要完成的重要功能之一。

我学过一点操作系统, 没听说过这种说法, 内存管理指的是合理使用内存 做为缓存的内存为什么要释放? 内存的速度都在至少1GBps/s以上, 当程序载入的时候会从硬盘读入需要的部分, 瓶颈是硬盘速度, 完全可以在读硬盘的时候一边清空内存, 一面将需要载入的部分写入刚清空的地方,根本不影响速度.
linux只有在内存不够的时候才会释放部分应用程序缓存和磁盘缓存,和程序载入是同步进行. 占用资源没什么大不了的, 只要在其他程序需要使用的时候及时放出就行了, linux又不是win98. 如果什么程序退出马上清空内存, 下一次运行的时候在重新读入, 然后保证内存最多只占用50%, 那和只有一半内存有什么区别?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表