仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 642|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA网站制作之java permgen内存泄露成绩处置仓酷云

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。事情以来,第三次呈现内存溢出,第一次是ThreadLocal没有remove酿成的成绩;第二次是ExecutorService没有准确的shutdown酿成的成绩;这一次的成绩在我脱手排查之前,已晓得了是permgen在不休的增加,在permgen中次要有Class和Meta信息,常量。
在入手下手阶段:扫除了ThreadLocal大概招致的成绩;扫除了Thread大概招致的成绩;前面就必要重新的冲破点找成绩了。
1:基础设置的排查
查找日记中会见量较年夜的哀求的URL:
awk{print$6}service-digest.*|awk-F","{print$1",""1"}|awk-F","{a[$1]+=$2;b[$1]++}END{for(nina)printa[n]""n}|sort-n
查找日记中的挪用良多的内容;仍然没有发明成绩;接纳webbench一个个的挪用哀求来摹拟操纵,前十名的URL没有发明成绩,前面的就没有检察了。
经由过程线下操纵,发明也不是入手下手嫌疑的RMI远程挪用的成绩;
针对CMS-GC,网上倡议守旧-XX:+CMSClassUnloadingEnabled-XX:+CMSPermGenSweepingEnabled,好吧,我们一入手下手就是守旧的。参考:permgen-out-of-memory-reasons
2:内存利用情形
2.1:检察内存利用情形
jmap-heappid
2.2:检察permsize的命令
jmap-heap`ps-ef|grepjava|grep-vgrep`|awkNR==44,NR==48
2.3:触发fullgc:
jmap-histo:livepid
2.4:不休的触发fullGC每10分钟察看一下内存的变更情形
PID=`ps-ef|grepjava|grepuic|awk{print$2}`
for((i=1;i<10000;i++));do
jmap-histo:live${PID}>/tmp/fullgc.log
jmap-heap${PID}|awk"NR==42,NR==48">>heap.log
echo$i
sleep600
done
2.5:察看一段工夫后(5个小时),剖析相干的permsize的内存增加情形
awk{if(NR%7==0)print$0}heap.log
3:检察perm中的情形
jmap-permstatpid
查询的了局相似一下情形:
0x00000000ce58bb18132000x00000000cc02c030deadsun/reflect/DelegatingClassLoader@0x00000000f4067700
0x00000000cec33d48130880x00000000cc02c030deadsun/reflect/DelegatingClassLoader@0x00000000f4067700
0x00000000ce39c8b0119440x00000000cc02c030deadsun/reflect/DelegatingClassLoader@0x00000000f4067700
0x00000000ce8ab27013104nulldeadsun/reflect/DelegatingClassLoader@0x00000000f4067700
0x00000000ceb1d108131040x00000000cc02c030deadsun/reflect/DelegatingClassLoader@0x00000000f4067700

total=16001132560491768N/Aalive=1,dead=1599N/A
不是反射的成绩。(deadsun/reflect/DelegatingClassLoader)
4:检察JDK的相干渣滓接纳情形
我们利用了CMSGC,过程当中发明的GC日记看不出任何成绩。
PS:将来我们找个工夫专门会商一下CMSGC的历程,便利我们在将来的渣滓处置过程当中找到加倍公道的办法去向理成绩。
5:检察perm中的类加载情形
在启动的剧本中翻开-verbose:class来检察运转的过程当中究竟几个类被加载了。【verbose和verbose:class意义不异,另有-verbose:gc,-verbose:jni】
JAVA_OPTS="${JAVA_OPTS}-verbose:class"
启动剧本中把输入内容从/dev/null2>&1&修正为>${PWD}/jvm.log
我们经由过程jvm的日记发明以下奇异的日记:
[Loadedcom.hqb360.uic.dao.point.entity.BonusPointDetail$$BulkBeanByCGLIB$$5a972456_249fromfile:/opt/jetty/work/jetty-0.0.0.0-8080-uic.war-_uic-any-/webapp/WEB-INF/lib/cglib-2.2.2.jar]
[Loadedcom.hqb360.uic.dao.point.entity.BonusPointDetail$$BulkBeanByCGLIB$$5a972456_250fromfile:/opt/jetty/work/jetty-0.0.0.0-8080-uic.war-_uic-any-/webapp/WEB-INF/lib/cglib-2.2.2.jar]
[Loadedcom.hqb360.uic.dao.point.entity.BonusPointDetail$$BulkBeanByCGLIB$$5a972456_251fromfile:/opt/jetty/work/jetty-0.0.0.0-8080-uic.war-_uic-any-/webapp/WEB-INF/lib/cglib-2.2.2.jar]
[Loadedcom.hqb360.uic.dao.point.entity.BonusPointDetail$$BulkBeanByCGLIB$$5a972456_252fromfile:/opt/jetty/work/jetty-0.0.0.0-8080-uic.war-_uic-any-/webapp/WEB-INF/lib/cglib-2.2.2.jar]
[Loadedcom.hqb360.uic.dao.point.entity.BonusPointDetail$$BulkBeanByCGLIB$$5a972456_253fromfile:/opt/jetty/work/jetty-0.0.0.0-8080-uic.war-_uic-any-/webapp/WEB-INF/lib/cglib-2.2.2.jar]
[Loadedcom.hqb360.uic.dao.point.entity.BonusPointDetail$$BulkBeanByCGLIB$$5a972456_254fromfile:/opt/jetty/work/jetty-0.0.0.0-8080-uic.war-_uic-any-/webapp/WEB-INF/lib/cglib-2.2.2.jar]
[Loadedcom.hqb360.uic.dao.point.entity.BonusPointDetail$$BulkBeanByCGLIB$$5a972456_255fromfile:/opt/jetty/work/jetty-0.0.0.0-8080-uic.war-_uic-any-/webapp/WEB-INF/lib/cglib-2.2.2.jar]
uic.dao.point.entity.BonusPointDetail的类一向在perm中增添,每次都在复制,没有重用,也没有被渣滓接纳。成绩基础就定位到这个中央。

自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。
沙发
发表于 2015-1-20 19:18:16 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.ckuyun.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
精灵巫婆 该用户已被删除
板凳
发表于 2015-1-21 06:02:13 来自手机 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
简单生活 该用户已被删除
地板
发表于 2015-1-25 22:00:43 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
深爱那片海 该用户已被删除
5#
发表于 2015-2-2 22:04:55 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
兰色精灵 该用户已被删除
6#
发表于 2015-2-6 19:06:27 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
admin 该用户已被删除
7#
发表于 2015-2-18 06:20:37 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
冷月葬花魂 该用户已被删除
8#
发表于 2015-2-19 19:21:42 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
变相怪杰 该用户已被删除
9#
发表于 2015-2-28 00:49:07 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
乐观 该用户已被删除
10#
发表于 2015-3-9 17:09:49 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
飘灵儿 该用户已被删除
11#
 楼主| 发表于 2015-3-10 01:20:07 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
活着的死人 该用户已被删除
12#
发表于 2015-3-17 03:46:05 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
若天明 该用户已被删除
13#
发表于 2015-3-23 17:58:51 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 20:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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