当前位置:  技术问答>linux和unix

程序运行20分钟狂泻1G内存,当系统只剩5、6M内存时程序依然运行稳定(未使用交换分区),点解?

    来源: 互联网  发布时间:2015-02-20

    本文导语:  软件环境:Red Hat Linux 7.2 硬件平台:DELL PowerEdge 1400SC,PⅢ XEON 1.226 * 2,1G内存     程序运行前大约有900M可用内存,运行20分钟减少至只剩5、6M可用内存,但是系统仍能继续稳定运行,运行free指令查看系统内...

软件环境:Red Hat Linux 7.2
硬件平台:DELL PowerEdge 1400SC,PⅢ XEON 1.226 * 2,1G内存

    程序运行前大约有900M可用内存,运行20分钟减少至只剩5、6M可用内存,但是系统仍能继续稳定运行,运行free指令查看系统内存使用情况,证明没有使用交换分区,不知何故?

    另外,本来程序存在很严重的内存泄漏问题,使用Purify for Linux测试,发现并修改了55处能够引起内存泄漏的Bug,回归测试Purify没有发现内存泄漏,但是程序运行时内存仍然飞快减少。无奈后来采用添加测试代码的方法,跟踪每个类和结构的new和delete操作,发现每一个new出来的对象均delete了,包括new出来的char之类的内存也均被证明已经delete。

    如果程序不存在内存泄漏为什么程序运行时系统的可用内存疯狂减少?如果存在内存泄漏的话为什么系统只剩5、6M可用内存时程序依然能够稳定运行?

    怀疑与Linux的内存管理有关,于是查了查Linux内存管理策略,没有找到满意的答案;( 
    
    请大侠给点儿启示,谢谢!!!

|
这个问题你不用担心,我想这也是linux区别于win的地方,linux尽量利用物理内存空间。
我的内存为512m,我用mysql特意大批量增加临时内存表,最后当内存需求达到3G时,此时物理内存用到近98%,交换区用了90%以上,此时系统性能还是非常的好!因此我认为,无需担心linux的内存管理,不过增加交换区应该是有用处的。

|
我觉得这个可能是创建子进程方面的问题,看看创建的子进程有没有全部正常结束,否则的话它占据的内存是不会释放的。我们以前遇到过这种情况,编了一个java程序,分明进程已经结束了,可是在进程列表还能看到它的子进程(僵尸状态),而且还继续占有着内存。

|
Using 'top' or 'ps' to view the memory used by this process.
The displayed free memory of system by 'free' means nothing.

|
我在7.3里面也发现过类似的问题,程序起来之后,我用sar -r看内存,发现每隔几秒就少几百k,
吓了我一跳。后来重启系统,没启动我的程序,用sar -r 看,还是每隔几秒,少几百k.
所以,我猜可能和应用程序无关。

|
请注意:你要观察的是你的程序使用了多少内存,而 不是 系统还有多少内存,因为linux的磁盘子系统会 自动 的使用可以使用的内存作为buffer,而当内存不够的时候又会 自动 的释放一些内存。如果你的程序有较多磁盘操作,你的测试并不能说明什么的...

|
linux下,当内存够用的时候它是不会使用交换分区的,它也一直不会调用kswapd
而且一旦装入内存的程序也不需要再从磁盘调用,除非有更改
我有次不小心在系统根目录下#rm -rf *了,系统几乎没剩几个文件,但是X windows一样使用mozilla关掉就不能再打开了

|
实际上Linux的开发者不希望太多的“可用内存”闲置起来,在应用程序不使用的时候,系统就把它用做cache和buffer;当程序需要使用这些内存时,再还给它们。
所以,从内存管理上,Linux要比Win高明得多。

|
和MS SQL Server有的一比了,哈哈

|
up

    
 
 

您可能感兴趣的文章:

  • c/c++服务器程序内存泄露问题分析及解决
  • 请教!Linux系统C开发的程序,为什么我的程序运行时内存持续增长,程序退出后内存也没有降低?
  • C++程序的内存不同的数据段及堆栈布局
  • 程序需要共享内存相当大,但是系统的内存有限
  • 遇到奇怪的内存泄露问题,应用程序杀死内存无法释放!
  • 常驻内存程序就是后台程序吗?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • CGI程序无法访问本机某个程序创建的共享内存〔求教〕
  • 在Linux上用C语言作了一个程序,程序中申请(malloc)了很大的内存,但是没free,当程序运行结束后,内存是否自动释放?
  • 请问能否在linux实现一个应用程序访问另外一个程序的内存数据?
  • arm程序内存占用问题
  • 请教多线程程序的内存占用问题
  • 程序占用很大的内存
  • 请教,在linux下如何判断程序的内存泄露?
  • 定时top看系统参数,发现我的程序的SIZE项和RES项的数值一直在增加,这是不是说明,我的程序有内存泄漏?
  • 在驱动程序里,用数组,或malloc是申请到虚拟内存吧?
  • 请问在SOLARIS上怎么实时查看程序的内存使用状况??
  • 驱动程序中关于内存的读写问题
  • 求助!怎样实现一个程序长期固定的在一块物理内存
  • 程序在不同的平台占用内存不一样
  • 急急急,请问如何检查C程序中内存泄露问题?
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • SecureCRT上运行一个JAVA程序,该程序类似一个在WINDOWS下一直运行的CMD窗口的东西,SecureCRT关掉后,JAVA还会继续运行吗?
  • Ubuntu程序开机自动启动设置(服务和自动运行配置文件)的几种方法
  • telnet到主机去运行一个我编的程序,退出telnet时那个程序也不运行了,这是怎么回事?按程序逻辑它应该一直运行下去的。
  • windows下cmd命令提示符下让程序后台运行命令
  • python计算程序开始到程序结束的运行时间和程序运行的CPU时间
  • jsp程序运行一次后,再修改原jsp程序,为什么运行还是的还是原来的程序??
  • 我的linux程序 如何 在pc机器上运行。现在我用arm-linux-g++ 编译后的程序在我的嵌入设备上运行。
  • 在JB7中默认的情况下会为程序生成一个包,程序在JB7中可以正常运行,可是在JDK中却无法运行
  • 我用C在UNIX下写程序,生产文本,如何能让我的程序并行运行,好加快运行速度,举例说明。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 程序员的八种级别,你属于哪一级?
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • 在docker容器中通过apt-get安装新的程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • linux下通过crond实现自动执行程序
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • http协议介绍,文件上传分析及程序举例
  • 在java控制台程序中,可以用System.exit(0);使用一个程序终止,那么在servlet中如何使一个servlet程序终止呢?
  • 程序员赚钱致富的6种方法
  • 程序调用脚本,脚本启动另一个程序,如何让原始程序彻底释放资源?
  • HASH查找的程序实现及性能分析
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收
  • 程序员为了健康必看!早晨空腹喝水,是对还是错?
  • 从定时从A程序调用B程序(B程序运行一下就退出)多次后,出现僵尸进程?如何解决?
  • 如何使用linux下gdb来调试python程序
  • JAVA 应用程序小程序中能不能运行其它程序(.EXE)的 如果能请问应该怎样调用?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3