??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品影视伊人网,欧美久久综合,欧美日韩在线综合http://www.aygfsteel.com/amenglai/category/53225.html看不完的牙,写不完的E序Q跑不完的步?/description>zh-cnFri, 18 Jan 2013 07:31:25 GMTFri, 18 Jan 2013 07:31:25 GMT60内存泄漏 - 开?数据库应?/title><link>http://www.aygfsteel.com/amenglai/archive/2013/01/18/394386.html</link><dc:creator>amenglai</dc:creator><author>amenglai</author><pubDate>Fri, 18 Jan 2013 03:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/amenglai/archive/2013/01/18/394386.html</guid><wfw:comment>http://www.aygfsteel.com/amenglai/comments/394386.html</wfw:comment><comments>http://www.aygfsteel.com/amenglai/archive/2013/01/18/394386.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/amenglai/comments/commentRss/394386.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/amenglai/services/trackbacks/394386.html</trackback:ping><description><![CDATA[最q都在读那个该死的猪弟写的代码Q原因还不是因ؓ压力试后,发现TMD的内存泄漏啦Q?br />边看代码边在心中鄙视q个猪小弟,该死的猪弟Q说你比猪笨Q猪觉得q是对自q侮i都不乐意Q?br />很多心得哦,慢慢整理出来?br />先说说JDBC吧?br /><strong>不关闭Connection</strong><br /><div><span id="wmqeeuq" class="Apple-style-span" style="font-weight: normal; ">q是最常见的错误,数据库增删改操作后,没有关闭数据库连接,D占用大量内存Q如果是用连接池Q那么系l很快就木有可用的数据库q接了;如果是直接连接数据库Q很快系l内存就耗尽了,要知道数据库q接很费资源的,否则要连接池q吗Q而且q种错误很难查,一个系l上百个DB操作Q就一个没关闭Q惨了!</span><br /><strong>不关闭Statement,ResultSet</strong><br /><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">q是另一U错误,数据库连接关闭了Q但是Statement,ResultSet没关闭。谁说的关闭了数据库q接其它׃用关闭的。只关闭q接Q那些Statement,ResultSet如同孤坟野g样占据你的HeapQ而且q是阴魂不散的说Q最后系l耗尽内存气绝w亡?/div></div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong>频繁数据库连?/strong><br />大多C务系l,一个业务操作可能会兌多张表的增删攏V麻烦不要每操作一张表Q就h一ơ数据库q接。麻烦把h数据库连接看做是请你学妹吃饭好不好,学妹很矜持Q请一ơ也不容易。这hQ你h数据库连接时Q就会}慎些Q尽可能一ơ数据库q接Q对多张表进行操作?br /><strong>l验</strong><br />不要把代码写成connection.close(); 或?nbsp;<span id="wmqeeuq" class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; ">datasource.getConnection();把他们都装到工L里面Q这h试的时候加q去debug代码Q很Ҏ找到那个该ȝq接没有关闭了。Statement, ResultSet也是q样?br /><br /></span>最后,猪小弟是谁?<br />呵呵Q猪弟?q前的我Q或者是8q前的我。当q_q幼无知Q无知者无畏,犯下无数的错误,感谢老板Q感谢客P你们太有牺牲_了?br /></div></div></div><img src ="http://www.aygfsteel.com/amenglai/aggbug/394386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/amenglai/" target="_blank">amenglai</a> 2013-01-18 11:14 <a href="http://www.aygfsteel.com/amenglai/archive/2013/01/18/394386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Eclipse Memory Analyzer对Tomcatq行内存分析http://www.aygfsteel.com/amenglai/archive/2013/01/17/394346.htmlamenglaiamenglaiThu, 17 Jan 2013 02:55:00 GMThttp://www.aygfsteel.com/amenglai/archive/2013/01/17/394346.htmlhttp://www.aygfsteel.com/amenglai/comments/394346.htmlhttp://www.aygfsteel.com/amenglai/archive/2013/01/17/394346.html#Feedback0http://www.aygfsteel.com/amenglai/comments/commentRss/394346.htmlhttp://www.aygfsteel.com/amenglai/services/trackbacks/394346.html

试环境

Java Q?/span> JDK1.6

TomcatQ?/span> Tomcat 5.5

Eclipse Memory AnalyzerQ?/span>EMA 1.2.1Q直接去Eclipse下蝲Q无需安装哈)

 

获得Heap Dump文g

Eclipse Memory Analyzer是针?/span>Heap Dump文gq行分析的,因此W一步就是要获得Heap Dump文g?/span>

步骤Q?/span>

获得U程ID?/span>启动jconsole.exe,?/span>位于jdk目录下的bin目录Q?/span>jconsole?/span>jdk自带的一个内存分析工P它提供了囑Ş界面。可以查看到被监控的jvm的内存信息,U程信息Q类加蝲信息Q?/span>MBean信息?br />

此处我们可以扑ֈ需要检的Tomcat的线E?/span>ID?/span>

获得Heap Dump文g?/span>使用jmap来获?/span>Heap Dump文gQ命令行如下Q?/span>

jmap -dump:format=b,file=heap.bin 3888

此处3888Tomcat对应的线E?/span>ID

生成分析报告

启动MemoryAnalyzer.exeQ打开指定?/span>Heap Dump文g?/span>File -> Open Heap Dump

MAT针对指定?/span>Heap Dump文gq行分析Q生成内存泄露检报?br />


看懂分析报告

要想看懂EAT的报告,与其到网上去扑֐U神_不如老老实实找本书Q先单复习下JVM?/span>Heap是怎么工作_gc的大概一个工作机制。否?/span>EAT的报告就像天书一栗?/span>EAT只是工具Q不是目的?/span>



amenglai 2013-01-17 10:55 发表评论
]]>
web应用中常出现的内存泄?/title><link>http://www.aygfsteel.com/amenglai/archive/2013/01/16/394286.html</link><dc:creator>amenglai</dc:creator><author>amenglai</author><pubDate>Wed, 16 Jan 2013 03:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/amenglai/archive/2013/01/16/394286.html</guid><wfw:comment>http://www.aygfsteel.com/amenglai/comments/394286.html</wfw:comment><comments>http://www.aygfsteel.com/amenglai/archive/2013/01/16/394286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/amenglai/comments/commentRss/394286.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/amenglai/services/trackbacks/394286.html</trackback:ping><description><![CDATA[企业U管理Y件的web应用和普通的web站点QB2C{有很大的不同。内存泄露的查点也会不同?br /><strong>查点一Q什么信息需要缓存在session?/strong><br />在各U管理Y件中Q最常见的是把当前用L权限{信息缓存在session中。好啦,问题来了Q如果系l的权限很复杂:操作权限Q管理权限,数据权限Q字D|限,巴拉巴拉一大堆的话Q那么把q大堆信息放到session中,一个用户就要占?0M+的内存。访问用户一多,pȝ挂了。而且理软g一般都会把session的timeout讄的很多,除非用户手动的注销Q否则即使木有操作也会吊在系l上很久。因此要评估此部分的设计Q把不必要的或者访问不频繁的数据拖出sessionQ放qsession TA老h家吧?br /><strong>查点二:session数据传?br /></strong><div><span style="font-weight: normal; ">理pȝ很多都会采用帧结构,常见的上帧查询条Ӟ下昄l果。问题来了,采用帧结构如果传递数据到面Q就要通过session。开发的时候,一般都是后台开发负责业务逻辑Q前台开发负责数据展C。前后开发一pQ后台向前台传递了一个集合对象,前台木有用,也不清除。这堆垃圾数据全部都ȝ内存Q所以系l跑着跑着宕Z?br /><div><strong>查点三:不要试图通过面来实现分?br /></strong><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-weight: normal; ">理pȝ׃业务复杂性等要求Q大安把注意力首先攑֜实现业务功能上,有时Ҏ据的量不是很关注。有的系l刚开始好好的Q用着用着不不爽了Q原因就是数据量一增加Q很多相关的问题都会暴露出来。最常见的是分页处理Q先把数据都取过来,在前台分|C。千万不要这P100条数据木有问题,1000条,10000条呢Q结果就是前台很忙,然后挂掉了?/span></div></div></span></div><img src ="http://www.aygfsteel.com/amenglai/aggbug/394286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/amenglai/" target="_blank">amenglai</a> 2013-01-16 11:32 <a href="http://www.aygfsteel.com/amenglai/archive/2013/01/16/394286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ȩ</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ന</a>| <a href="http://" target="_blank">̨ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Т</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϽϽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">â</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ξ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ء</a>| <a href="http://" target="_blank">첼</a>| <a href="http://" target="_blank">¤</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank">ĵ</a>| <a href="http://" target="_blank">ϴ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϊ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">۳</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>