内存跟踪,内存泄露,内存

  • 时间:
  • 浏览:3
  • 来源:uu快3网站_uu快3充值_玩法

碎片吧,人太好只是 与否特大哪此的难题,俗话说挤一挤总还有的,人太好不行,我报错重启总行吧,反正一一一二个client,又都有Server。这也只是 说说,以photoshop这俩级别的client,内存开的那叫一一一二个恐怖啊。我这随便操作了两三下,得,malloc次数10w,这,这也太离谱了点。。。。。这都有把可怜的2G空间玩死里捏吗。

这回却是一一一二个很好的锻炼可能性,可能性遇到了一一一二个这类photoshop的庞然大物,只是 代码从c到c++到c#,满世界的malloc,new,GC,这要泄露起来,可谓是五毒俱全,声色一时无两啊。哈哈哈哈(被吓傻了)

malloc人太好也什么都有版本,最初的malloc算法也是种类繁多,各执一词,但据说次从N年前,tcmalloc诞生事先,就王者归来了一把,从此再无硝烟。只是 可能性tcmalloc应用程序池池比较差,什么都有事先才有linux的ptmalloc和通用版本的nedmalloc做了一些改进。还都要毫不夸张的说,用nedmalloc/hoard用上手事先,一般的应用程序池池,也就越多再优化来优化去了,只是 用考虑啥memory pool了,帮我,这也是现在malloc算法名声不显的是因为吧。

是的,有一一一二个重要哪此的难题是不到忘记的,这里不但有可控的c/c++,还有不可控的C#和.net。要我知道一一一二个真实的事,有那么人心比天高的开发了一套很高级的j2ee后台服务,号称。。。(此处省略300000字),上线前听说出事了,内存泄露,好吧,java的内存泄露,只是 又听说处置了,为什么在么在处置的呢,买了IBM的purify和一年高级服务,只是 直接用高级服务从美国弄了自己过来purify了四天,价格?10w+。

哪此都有基于C的,一些人还有一一一二个后起之秀,基于C++的google-perftools,据说性能都要彪悍一些,可能性自己VC6,什么都有就。。。。。

Hook法:人太好new和malloc都提供有hook法律土办法,《Windows核心编程》就提到了非著名的crtdbg库(对于初级应用程序池池员,这东西少那么人知啊)。

最重要的哪此的难题,只是 ,你的哪此的难题是哪此,什么都有我称之为世界观哪此的难题,比如,就内存泄露而言,对于纯C++应用程序池池而言(现代C++),new和delete以及设计良好的class还都要极好的屏蔽内存泄露的哪此的难题,什么都有看多内存泄露,我认为合格的c++应用程序池池员应该首先考虑设计的合理性。而对于内存碎片哪此的难题,优雅高效的内存分配算法和一一一二个设计合理的memory pool 才是终极兵器。

相对来说,核心哪此的难题,也只是 最终决定你还都要处置哪此的难题的东西,是应用程序池池员的内存观念,可能性说对内存的理解,这方面推荐《windows核心编程》。相当于总得知道用户内存空间不到2G,知道virtualAlloc,知道HeapAlloc,知道dll对内存的共享,知道内存碎片化的后果,知道tls。。。。。。

工具法:著名工具BoundsChecker,processXP等。。。。。。。。

但再好它也只是 个柴刀,装备存在问题好啊。从前添加了CallStack,那可只是 电锯和柴刀,白板和暗金的距离了。这俩东西人太好有成品,著名的Visual Leak Detector (http://www.codeproject.com/KB/applications/visualleakdetector.aspx)是也,当然商业化的BoundsChecker也挺好,前提有你在身边有破解和一台彪悍无比的机器。以及,vld和boundschecker越多再自杀,好吧,我承认我这里都跑不起来,我人品应该没哪此的难题吧。。。。。。

2:一一一二个全局的FileMapping,保存所有dll中memorylist头指针。那帮我随时遍历全局内存,只是 Filemapping是系统级别的可见,甚至还都要在一些应用程序池池中访问。

GC我人太好是半生不熟悉,只好又去求教Jeffrey Richter 的 《CLR Via C#》,只是 被我发现了 CLR Profiler,什么都有说哪此事情都怕楞的,我这俩也是初哥蛮干,选项全开,CLR Profiler一开,挂了。内存一路飚涨,直到“Out of Memory”,无语。只是 吧,学乖了只开个基本开关,做十几个 snapshot马上退出,看着内存从1G飚到3G,再飚下来,心里直念阿弥陀佛你老人家早啊。看看结果我也楞了,20寸的显示器删改存在问题大的,那位借个65寸的给我使使吧,最后那么 律土办法,数据拷回去那看电影那个28的屏幕做分析,勉强够啊也就。真都有一般人玩的起的。.Net还你以为出了哪此的难题,有十几个 对象死活那么 释放,只是 还越多,貌似哪此eventhandler,我的不懂。只是 那么人找了个商业的.net memory profiler 出来,马上就好多了,那是腰也直了,眼睛也亮了,腿脚也好了啊,你看看人家,内存没占十几个 ,性能影响极少,自带分析界面,还都要snapShot,还都要compare,还带智能分析。败家的clr profiler啊。

重载法:对于C++来说,人太好还有个重载全局new的法律土办法还都要用。。。。。

Problem 2:内存泄露

2:世界观

说是简单,可能性我只做了两件事情,内存重用和定期回收。free不再free,只是 设了个标志位,遇到都要malloc同样size的内存时,直接return就好。而为了处置内存无限制增长,还做了定期回收,比如300秒可能性一分钟回收一次不再使用的内存。

有了统计信息,一些人就还都要处置一要素哪此的难题了,我希望再添加一一一二个snapShot的功能,再添加compare一下,就还都要针对哪此的难题,发现未释放内存的大小和地址了。对于跟踪大块内存泄露,马上就从蒙昧时代,进化到刀耕火种了。现在只都要一一一二个条件断点,就还都要把哪此的难题,跟个八九不离十出来。

实践永远比动脑子臆想复杂性,比如我臆想着一一一二个define+list就还都要开杀的事先,发现还都有那么 回事。比如,当你都要跨越多层lib,在所有dll中统计全局内存的事先。事情就变复杂性了,首先,你希望看多每个dll自己的内存,接着,要我我牺牲越多下行数率 ,只是 ,你都要结果越多再 易于访问,最后,别忘了应用程序池池同步。帮我破了脑袋,才整出一一一二个临时处置方案的0.1beta版而已。

对付碎片哪此的难题,绝招有一一一二个,一:用linux,二:用memory pool。

接下来的哪此的难题,只是 比较了,这俩方案除了减少碎片以外,到底能带来多大的性能提高呢?

1:一一一二个公用的memory库,定义一一一二个static变量用来指向memory list,那帮我保证每个使用这俩库的dll拥有所那么人的memorylist。

3:简单有效的数据形态(包括memoryinfo和globalmemoryinfo),良好的数据同步机制。

Problem 4:内存优化

这俩坑人太好很大很大。。。。。。

人太好这俩字很长,但人太好只是 一码事,试问你做内存跟踪都有为了看泄露?试问你看多了泄露和碎片不回去优化?哈哈

一般这俩阶段是最消耗时间和耐性的,毕竟有了CallStack也还是要自己一行行的去review code,但同理,实际情况汇报永远比你想象的复杂性,比如我明明看多全局统计里边,C/C++内存那么 涨,从前应用程序池里边可能性涨了3000MB了,oh my god,这又是为什么在么在一回事。

自己写一一一二个只是 难,StackWalk64函数给好了,抄抄代码也就搞懂了,自己用用还是够的。

hoard:http://prisms.cs.umass.edu/emery/index.php?page=hoard

内存哪此的难题由来已久,最早做c++的事先,包装的很好,这俩东西人太好不明显,可能性多半是new和delete,malloc和free显得很糙扎眼,泾渭分明,最大的麻烦只是 过是从这里new/malloc,去那里delete/free,这俩东西极少,反而很好抓出来暴打五十大板。什么都有那会名义上boundschecker啥的用了一堆,实际上却没哪此技术活,都拼体力去了,反正就十几个 点,我单步还不成么。

我一向干点啥事,都有被勾引的,先是要处置哪此的难题,只是 又人太好存在问题过瘾,就变成优化哪此的难题有两种。这回的任务从前是内存泄露,我东一榔头,西一锤子的,却是满世界乱敲,敲到最后,从前的哪此的难题早湮灭了,剩下的,只是 自己的哪此的难题而已。

goole-perftools:http://code.google.com/p/google-perftools/

宏定义法:不管现代版的new还是古典版的malloc,#define吃遍天下无敌手啊,#define malloc mymalloc #define new mynew不就成了。

最后我选了条通俗易懂的道道,#define malloc/free,当然,你还都要一一一二个c级别的list,帮我,就那么 多了,人太好一大片废话只得到那么 个结果。

经过测试,这俩方案对于内存碎片哪此的难题是革命性的(纯属自夸),在300s回收条件下,malloc的次数整整降了一一一二个数量级,从前10w次的malloc,只都要不到8k,就能完成所需了。而内存占用,也难能可贵比傻傻的malloc/free多出十几个 来,这也是图像应用程序池池的性质决定的,往往都有开一些同样大小的内存,malloc次数又是极高。

nedmalloc:http://www.nedprod.com/programs/portable/nedmalloc/

至此哪此的难题基本处置了,人太好可能性还都要喝酒聊天,一些人party了。剩下的都有我自己兴趣。。。。。

GC法:GC值得单独搞懂来说,可能性你那么 干涉他,只是 又能找到什么都有工具,比如微软的CLR Profiler,比如收费的.net memory profiler,以及各种重量级。。。

看多删改的内存统计数据的事先,我乐得那是一一一二个合不拢嘴啊,这俩刀基本上是磨了个1/3出来了,简单砍砍柴,那是哪此的难题不大。

1:法律土办法论

就我自己而言,是不愿放弃碎片哪此的难题的,毕竟对于图像应用程序池池,极少量碎片伤害越多。什么都有我的最终方案,既都有替换malloc,也都有构造memory pool,只是 第有两种选泽,一一一二个简单的GC。

话说回来,一一一二个全局的内存跟踪器仍然是一大杀器,你说哪此内存有哪此的难题,你说哪此内存没哪此的难题,你说哪此你优化了,你说哪此下行数率 那么 变,你说哪此我把内存全打出来了,吃了十几个 ,费了十几个 ,漏了十几个 ,时间节省了十几个 ,他。。。。。。。。。

对于内存的跟踪,人太好法律土办法什么都有,我所知道的,还都要归为几类

对于普通应用程序池池不太重要的碎片哪此的难题,在一跑只是 十几个 月的Server上,和对内存极度渴求的图像,音乐,视频应用程序池池中,就变成了暴风源头,一不小心,那可只是 一场台风。

3:实践

第一一一二个答案人太好很,为什么在么在说呢,那么 律土办法,做Server的人相当于都知道,VC的Malloc下行数率 极低,要我无法忍受,而相反,linux的malloc几乎有你在身边能想到最新最快的,所有一些做linxu的人,很干脆的只是 直接用malloc/free,才懒得写那劳什子的memory pool。

至于Memory Pool,可谓仁者见仁,智者见智了,一般是用在嵌入式和Server上。一些地方,那就根据需求,量身定做,才会合乎需求,提高下行数率 ,不然就要画虎不成反类犬了。用了还不如越多再。只是 对memory pool的管理算法,自己也是头疼的紧,暂时还那么 一一一二个很糙有效的法律土办法,不知哪里有达者还都要教我。

最后,希望能实现一一一二个漂亮的GC算法,提高10倍左右的性能和降低一一一二个数量级的malloc/free次数吧,待续。。。。。

Problem1:内存跟踪

理论知识咱不具备,什么都有现实点,从实践出发好了。

Problem 3:内存碎片

猜你喜欢

怎么判断一个男生是否喜欢你

看他对你的态度。机会另一俩个 女生不主动找你聊天,你说什么是机会她遇见你找她聊天。以后,机会另一俩个 男生不主动找你聊天,大多数是机会他是真的我以后找你。机会他喜欢你,他时

2020-01-23

一个你喜欢女生或者男生对你爱理不理,你会怎么办?

扫描二维码下载使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。你在她那,你爱不爱我若果有有一个普通大伙,你想关系进一步亲密,就要了解她,时不时去哪里,喜

2020-01-23

LINUX 环境下源码方式安装mysql(二)my.cnf配置细节详解

2.错误日志的存储:my.cnf中到底还还都可不都能不能配置你这些属性呢?1.执行cmake操作的以后要指定参数:注:数据表中的日志还还都可不都能不能了查看/etc/mysql

2020-01-23

我和女朋友分手两天了,她发表一个说说,说一个人要是对你冷漠那是真的冷的很彻底,什么意思

扫描二维码下载追答追答追答下载百度知道APP,抢鲜体验追答追问可选中4个 或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个难题。为你推荐:追问追问这三三5

2020-01-23

女朋友说我对她不好了,我也没感觉到哪里对她不好了呀

展开完全说明女亲戚亲戚朋友 爱你,心里可以了你在有有1个,她还要你的爱,平时多陪陪她,时刻让她感到你的温暖,你有多么的爱她,她才感觉被委托人是多么的幸福。你对你是什么

2020-01-23