程序运行过程 内存占用量持续流放之路增加持续时间什么原因

请教高手:程序运行中内存突然增加一个G,而且CPU也有点高,是怎么回事呢?-CSDN论坛
请教高手:程序运行中内存突然增加一个G,而且CPU也有点高,是怎么回事呢?
程序在运行过程中在一分钟内突然增加了一个G,程序本身正常的内存是40多M,但是突然变为1.2G,而且CPU也有点高,检查了代码,没有发现内存泄露,不知是什么原因,请高手赐教啊,定位了好多天了
char&*p&=&new&char&[24];
这样就增加一个G了
检查了代码,没有这样的new操作啊
在什么系统下?
是Windows&Server&2008&R2,而且我觉得应该不是数组越界,因为CPU还有点高啊,会不会是vector的使用?
上代码。。。&ex:跟数组越界有毛关系
程序代码有10K,而且公司信息安全管理,不能上传啊
不用怀疑标准库,我以前在solaris下发现过突然增加400M的,你可以查查是不是返回了临时变量的引用这类的问题
你能不能把你vector附近的代码贴出来看看用的是否不合理,C++水深坑多,要小心
高人,什么是临时变量的引用啊?
vector光定义的地方就有200多处,实在不好贴啊
const&std::string&&Function()
&&&&return&"";
临时变量的引用,怎么会导致内存突然增大呢?
具体原因我也不清楚,我也只是把我遇见的情况说出来,你好好检查检查吧
好,我先检查检查代码,多谢高人
哎,检查过了,没有返回临时变量的引用的操作
内存泄漏啊,没有清空使用后的内存
引用&1&楼&luciferisnotsatan&的回复:char&*p&=&new&char&[24];
这样就增加一个G了
经典的解释
但是是在一分钟内内存达到1.2G,内存泄露不可能吧,而且检查了代码,排除了内存泄露,现在也没有办法了,因为10KL的代码,不可能一行一行的走读吧,哎,不知各位高人还有什么建议码?多谢多谢多谢
把代码一点点的注释掉,然后定位吧!
问题不是必现,是无规律重现,不注掉代码也不一定出现,所以。。。。。。
线程没释放?代码有没有用线程池?有观察池的使用或者size吗?
重载&new/delete,加全局变量记录所有已分配内存的总大小,new&里加&if&判断,大于&1g&的时候下断点,debug&运行,多来几次,看每次进入断点的时候调用堆栈,找找有没有看着可疑的函数,然后顺藤摸瓜的找原因,找的时候先怀疑自己的代码,标准库的绝大多是情况下都没问题,一般有问题也是你用错了。别忘了&delete&里要对同样的全局变量做调整,否则内存记录就不真实了。
用调试版本运行,大内存分配的时候加输出,内存高的时候用vs&attach进去查,
引用&22&楼&ri_aje&的回复:重载&new/delete,加全局变量记录所有已分配内存的总大小,new&里加&if&判断,大于&1g&的时候下断点,debug&运行,多来几次,看每次进入断点的时候调用堆栈,找找有没有看着可疑的函数,然后顺藤摸瓜的找原因,找的时候先怀疑自己的代码,标准库的绝大多是情况下都没问题,一般有问题也是你用错了。别忘了&delete&里要对同样的全局变量做调整,否则内存记录就不真实了。这个方法真高明啊。
会不会vector扩张导致的。
好像stl容器会成倍增长的,而且增加容量后会把前面的统统复制一遍,占用大量cpu
和你描述的情况类似。
如果真要解决,必须贴代码。让大家猜来猜去没有意义。如果你觉得有问题,肯定是自己代码的问题。天知道你怎么写的
使用工具检查吧。http://www.leewei.org/?p=2358
找工具去查内存泄漏比较好。在这里大家都是凭空猜,没啥用。
有时不写日志到文件中是无论如何也发现不了问题在哪里的,包括写日志到屏幕、单步或设断点或生成core文件、……这些方法都不行!
写日志到文件参考下面:
#include&&stdio.h&
#include&&stdlib.h&
#include&&string.h&
#ifdef&WIN32
&&&&#include&&windows.h&
&&&&#include&&io.h&
&&&&#include&&unistd.h&
&&&&#include&&sys/time.h&
&&&&#include&&pthread.h&
&&&&#define&&CRITICAL_SECTION&&&pthread_mutex_t
&&&&#define&&_vsnprintf&&&&&&&&&vsnprintf
#define&MAXLOGSIZE&
#define&MAXLINSIZE&16000
#include&&time.h&
#include&&sys/timeb.h&
#include&&stdarg.h&
char&logfilename1[]="MyLog1.log";
char&logfilename2[]="MyLog2.log";
static&char&logstr[MAXLINSIZE+1];
char&datestr[16];
char&timestr[16];
char&mss[4];
CRITICAL_SECTION&cs_
#ifdef&WIN32
void&Lock(CRITICAL_SECTION&*l)&{
&&&&EnterCriticalSection(l);
void&Unlock(CRITICAL_SECTION&*l)&{
&&&&LeaveCriticalSection(l);
void&Lock(CRITICAL_SECTION&*l)&{
&&&&pthread_mutex_lock(l);
void&Unlock(CRITICAL_SECTION&*l)&{
&&&&pthread_mutex_unlock(l);
void&LogV(const&char&*pszFmt,va_list&argp)&{
&&&&struct&tm&*
&&&&struct&timeb&
&&&&if&(NULL==pszFmt||0==pszFmt[0])&
&&&&_vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);
&&&&ftime(&tb);
&&&&now=localtime(&tb.time);
&&&&sprintf(datestr,"%04d-%02d-%02d",now-&tm_year+1900,now-&tm_mon+1,now-&tm_mday);
&&&&sprintf(timestr,"%02d:%02d:%02d",now-&tm_hour&&&&&,now-&tm_min&&,now-&tm_sec&);
&&&&sprintf(mss,"%03d",tb.millitm);
&&&&printf("%s&%s.%s&%s",datestr,timestr,mss,logstr);
&&&&flog=fopen(logfilename1,"a");
&&&&if&(NULL!=flog)&{
&&&&&&&&fprintf(flog,"%s&%s.%s&%s",datestr,timestr,mss,logstr);
&&&&&&&&if&(ftell(flog)&MAXLOGSIZE)&{
&&&&&&&&&&&&fclose(flog);
&&&&&&&&&&&&if&(rename(logfilename1,logfilename2))&{
&&&&&&&&&&&&&&&&remove(logfilename2);
&&&&&&&&&&&&&&&&rename(logfilename1,logfilename2);
&&&&&&&&&&&&}
&&&&&&&&}&else&{
&&&&&&&&&&&&fclose(flog);
void&Log(const&char&*pszFmt,...)&{
&&&&va_list&
&&&&Lock(&cs_log);
&&&&va_start(argp,pszFmt);
&&&&LogV(pszFmt,argp);
&&&&va_end(argp);
&&&&Unlock(&cs_log);
int&main(int&argc,char&*&argv[])&{
&&&&int&i;
#ifdef&WIN32
&&&&InitializeCriticalSection(&cs_log);
&&&&pthread_mutex_init(&cs_log,NULL);
&&&&for&(i=0;i&10000;i++)&{
&&&&&&&&Log("This&is&a&Log&%04d&from&FILE:%s&LINE:%d\n",i,&__FILE__,&__LINE__);
#ifdef&WIN32
&&&&DeleteCriticalSection(&cs_log);
&&&&pthread_mutex_destroy(&cs_log);
&&&&return&0;
//1-78行添加到你带main的.c或.cpp的那个文件的最前面
//81-85行添加到你的main函数开头
//89-93行添加到你的main函数结束前
//在要写LOG的地方仿照第87行的写法写LOG到文件MyLog1.log中
引用&1&楼&luciferisnotsatan&的回复:char&*p&=&new&char&[24];
这样就增加一个G了
可以一下分配1G的内存吗?
谢谢大家,程序在运行期会一直有40个线程,而且代码有10K,实在是没法贴出来,
对大家的建议,我会一一试试,有结果了,我会及时放上来,多谢多谢
用内存泄漏工具来试试
看看是什么原因引起的
才一万行代码而已,有必要这样纠结?
1.COPY一份出来;
2.如果模块化做得比较好,那么先把所有模块都注释掉,然后逐步添加;
3.如果模块化做得不好,先把主流程的分支全部砍掉,然后逐步添加。
哪一步出现了内存巨增,就是它了。花费时间应该不会超过三天,总好过你在这里瞎琢磨。
具体的情况我没有跟大家说清楚,其实这个问题是在用户那里出现的,而且是无规律重现,在我们的测试环境不出现,用户的环境我们不能操作,更不可能做调试,所以才很纠结,所以我一直想问下各位高人看有谁遇到过类似的问题以及可能的原因,我们好逐一排查,现在检查代码,vector、new/delete都排除了,不知还有什么可能的原因,很郁闷。。。
40个线程,检查各个线程吧,会不会是同步问题。
检查是否资源泄漏的办法之一:
在任务管理器&进程&查看&选择列&里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
死循环+new了吧
Intel&Parallel&Inspector
引用&35&楼&wulihong&的回复:具体的情况我没有跟大家说清楚,其实这个问题是在用户那里出现的,而且是无规律重现,在我们的测试环境不出现,用户的环境我们不能操作,更不可能做调试,所以才很纠结,所以我一直想问下各位高人看有谁遇到过类似的问题以及可能的原因,我们好逐一排查,现在检查代码,vector、new/delete都排除了,不知还有什么可能的原因,很郁闷。。。
看看你们程序,在哪里有可能会短时间内创建大量对象,加日志。如果只有用户那能重现,那么只有等用户用了新软件,除了问题,把日志发给你们了。
谢谢大家的建议,我现在加了很多日志,就等着发给用户收集信息来分析了,有了结果,我会及时告诉大家,以便大家都能注意,再次谢谢大家:)
我也不知道,顺便好好学习一下.
上面有位牛人说了,重载new,在new里面打日志,也许是一次new很大,也有可能重复new了。要是一次new了很大,这个很好查出来是哪new的,要是重复new的,分析下日志,看是哪里密集new的内存
估计是由于vector导致,在vector的生存期内,它的内存占用空间只增不减,所有内存空间是在vector析构时候才能被系统回收。
可以使用swap()函数来迫使vector离开其自身的作用域,从而强制释放vector所占的内存空间。
谢谢大家,问题解决了,是因为类似死循环+list导致的,谢谢大家!
引用&22&楼&ri_aje&的回复:重载&new/delete,加全局变量记录所有已分配内存的总大小,new&里加&if&判断,大于&1g&的时候下断点,debug&运行,多来几次,看每次进入断点的时候调用堆栈,找找有没有看着可疑的函数,然后顺藤摸瓜的找原因,找的时候先怀疑自己的代码,标准库的绝大多是情况下都没问题,一般有问题也是你用错了。别忘了&delete&里要对同样的全局变量做调整,否则内存记录就不真实了。
好方法,学习了
都说的什么。。。完全不懂哎。。。
回复查看: 5437|回复: 16
程序运行过程 内存占用量持续增加什么原因?
阅读权限20
结帖率: (6/6)
我电脑内存16G。 运行程序前,内存占用率10%左右。程序启动后,内存占用率40% (50开),多线程。之后内存占用量就一直增加。持续2小时后,占到100%,电脑越来越卡。
程序是大漠创建对象,绑定每个窗口操作的。CPU在20%左右,没有太大变化。
程序关闭后,关闭所有挂机的窗口。内存占用率还是下降很少,占到73%。任务管理器中,没有发现占用内存特别高的。重启了explorer也没反应。找不到内存占用到哪里了。关闭了也还是占内存。
下面是图片:
21.png (38.46 KB, 下载次数: 0)
19:28 上传
22.png (33.22 KB, 下载次数: 0)
19:29 上传
23.png (24.35 KB, 下载次数: 0)
19:30 上传
打开任务管理器,点性能,然后点资源监视器,选择内存,可以看到内存的具体使用情况,有详细的数据给你分析
回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至
可获得加分喔。友情提醒:本版被采纳的主题可在
帖子申请荣誉值,获得 1点 荣誉值,荣誉值可兑换终身vip用户组哦。快捷通道: →
阅读权限90
打开任务管理器,点性能,然后点资源监视器,选择内存,可以看到内存的具体使用情况,有详细的数据给你分析
热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!
您可以选择打赏方式支持他
阅读权限20
结帖率: (6/6)
是因为调用大漠插件的原因么?
以前用按键精灵的时候,也会越来越卡,不过没这么明显啊,那个是1整天不关机才会卡,这个运行2小时就卡的不动了。
您可以选择打赏方式支持他
阅读权限30
结帖率: (5/7)
废话,多线程不去处理,就这么一直开着?
假如:多线程打开记事本,循环计次多线程,你说电脑卡不卡,原因其实就这样,自己做个线程流,暂停、恢复、结束、关闭
每个线程启动后,到最后结束时,我全都关闭线程了啊。关闭之前的线程,然后再开启新的线程。问题是,内存占用那么多,程序停止的时候,已经关闭所有线程了,内存占到11G多。跟线程没什么关系吧。内存哪里占用的也找&
您可以选择打赏方式支持他
阅读权限20
结帖率: (6/6)
废话,多线程不去处理,就这么一直开着?
假如:多线程打开记事本,循环计次多线程,你说电脑卡不卡,原因其实 ...
每个线程启动后,到最后结束时,我全都关闭线程了啊。关闭之前的线程,然后再开启新的线程。问题是,内存占用那么多,程序停止的时候,已经关闭所有线程了,内存占到11G多。跟线程没什么关系吧。内存哪里占用的也找不到,任务管理器里没有占用那么多内存的进程。
线程创建后,关闭线程和句柄然后释放内存&
您可以选择打赏方式支持他
阅读权限70
结帖率: (7/9)
这个問題我之前是看了ET助手的视頻教程才知道的。你有没有看过?
您可以选择打赏方式支持他
阅读权限30
结帖率: (5/7)
每个线程启动后,到最后结束时,我全都关闭线程了啊。关闭之前的线程,然后再开启新的线程。问题是,内存 ...
线程创建后,关闭线程和句柄然后释放内存
启动线程 (&子线程, , 全局子线程 [登录窗口])
CoInitialize (0)
。。。。。。
子线程内部代码。
子线程最后:
CoUninitialize ()
强制结束线程 (全局子线程 [当前窗口])&
您可以选择打赏方式支持他
阅读权限10
看你内存的图有什么用啊,关键是看你代码,肯定是代码需要优化啊.
启动线程 (&子线程, , 全局子线程 [登录窗口])
CoInitialize (0)
'。。。。。。
'子线程内部代码。
'子线程最后:
CoUninitialize ()
强制结束线程 (全局子线程 [当前窗口])
您可以选择打赏方式支持他
阅读权限20
结帖率: (6/6)
线程创建后,关闭线程和句柄然后释放内存
启动线程 (&子线程, , 全局子线程 [登录窗口])
CoInitialize (0)
。。。。。。
子线程内部代码。
子线程最后:
CoUninitialize ()
强制结束线程 (全局子线程 [当前窗口])
补充内容 ( 18:48):
登录窗口是全局变量,在子线程启动后,立刻就赋值给局部变量 当前窗口。
强制结束线程后面在加个关闭线程句柄
你先试下这个简单的吧&
您可以选择打赏方式支持他
阅读权限20
结帖率: (6/6)
看你内存的图有什么用啊,关键是看你代码,肯定是代码需要优化啊.
启动线程 (&子线程, , 全局子线程 [登录窗口])
CoInitialize (0)
'。。。。。。
'子线程内部代码。
'子线程最后:
CoUninitialize ()
强制结束线程 (全局子线程 [当前窗口])
'登录窗口是全局变量,在子线程启动后,立刻就赋值给局部变量 当前窗口。
您可以选择打赏方式支持他
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪
违法和不良信息举报电话,QQ: ,邮箱:@b.qq.com
Powered by
粤公网安备 25win10查看程序运行时占用虚拟内存大小方法
发布时间: 08:53
& & 近期朋友在电脑使用过程中,遇到这样一个烦心的问题,由于电脑经常提示虚拟内存不足,于是想要查看电脑中打开的程序所占用的虚拟内存的大小,但是却不懂的如何进行查看,遇见这样的情况有没有什么好的方法可以解决呢?经过多番的研究总算找到了解决的方法,下面就一起来看看查看win10打开程序所占用虚拟内存大小方法。
& & 1.登录win10系统桌面,在任务栏上右键,点击打开&任务管理器(K)&如下图所示
& & 2.在打开的任务管理器窗口中,将界面切换到&详细信息&界面。如下图所示
& & 3.在详细信息界面下的状态栏旁边空白位置右键,点击打开&选择列(S)&进入下一步操作。如下图所示
& & 4.在打开的选择列窗口中,拖动滚动条,找到&提交大小&点击勾选并且点击&确定&完成操作。如下图所示
& & 以上就是win10如何查看程序运行占用虚拟内存大小方法,有遇到此类情况或者是不懂的如何查看win10系统中程序运行占用虚拟内存大小的用户,可以尝试以上的方法操作看看,希望以上的方法可以给大家带来更多的帮助。
很多用户想要加入吃鸡游戏,却由于吃鸡游戏对电脑配置要求非常高,担心自己电脑带不动...
相信很多win8用户都曾遇到过无线网络无法连接的情况吧,那么遇到这种问题该如何解...
大白菜下载
软件大小:358 MB
软件大小:490 MB
软件大小:358 MB
软件大小:3.03 MB
U盘启动bios设置
大白菜热门教程
大白菜电脑课堂
闽ICP备号 Copyright
www.bigbaicai.com 大白菜2010年5月 其他开发语言大版内专家分月排行榜第三2009年7月 其他开发语言大版内专家分月排行榜第三2005年3月 其他开发语言大版内专家分月排行榜第三
2004年8月 C/C++大版内专家分月排行榜第三
2004年8月 C/C++大版内专家分月排行榜第三
2004年7月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|2012年7月 C/C++大版内专家分月排行榜第二2012年6月 C/C++大版内专家分月排行榜第二
2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|

我要回帖

更多关于 leproc.exe 持续占用 的文章

 

随机推荐