jvm性能瓶颈诊断分析

 jvm性能瓶颈诊断分析
 在java应用程序中,虽然不太容易出现内存溢出的问题,以为jvm会不定期的进行垃圾回收,但是因为程序不合理的写法,也会导致一些数据不能被收集,典型的情况包括:
 1、在HashMap中放置大量不用的数据,而没有及时的清理。
 2、在web应用中,开发人员喜欢在session中放置状态数据,而没有及时的清理。
 3、在session中存放数据还好,因为session终究会有过期时间,但是如果在class的static变量中放置数据就不能被及时垃圾回收
                                permGen溢出:"java.lang.OutOfMemoryError PermGen space"
/bin/catalina.sh在CATALINA_base:%CATALIAN_base%
JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方jar文件移植到tomcat/share/lib目录下,这样可以减少JAR包重复占用内存的目的
                                heap溢出:"java.lang.OutOfMemoryError java heap space"
提示:在JVM中如果98%de时间用于GC,且可用的Heap大小不足2%时,将抛出此异常信息,Heap最大不要超过可用的物理内存80%一般要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值
JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:PerSize=64 -XX:MaxPermSize=128m -XX:NewSize=8m -XX:MaxNewSize=16m
                                 jvm内存泄露:垃圾回收时promotion failed

$JAVA_ARGS.=" -Dresin.home=$SERVER_ROOT -server -Xmx3000M -Xms3000M -Xmn600M -XX:PermSize=500M -XX:MaxPermSize=500M -Xss256K -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log";
1、原因Survivor空间不足 2、old区空间不足 full gc
带CMS参数的都是和并发回收相关的,CMSInitatingOccupancyFraction,这个参数设置有很大技巧,基本满足(Xmx-Xmn)*(100-CMSInitatingOccupancyFraction)/100>=Xmn就不会出现promotion failed,

jvm:使用-XX:PermSize设置非堆内存初始化值,默认是物理内存的1/64;由XX:MaxpermSize设置最大非内存的大小,默认是物理内存的1/4、
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章