|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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中增添,每次都在复制,没有重用,也没有被渣滓接纳。成绩基础就定位到这个中央。
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。 |
|