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、
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章