search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

JVM 診斷調優 CheatSheet

使用top去獲取進程cpu使用率;使用/proc文件查看進程所佔內存。

jps

jcmd [pid] GC.class_histogram

jcmd [PID] GC.heap_dump [FILENAME]

jinfo -flags [pid] #有效參數

jcmd [pid] VM.flags #所有參數

查看對應參數的值

jinfo -flag [flagName] [pid]

啟用/禁止某個參數

curl -s "https://raw.githubusercontent.com/superhj1987/awesome-scripts/master/self-installer.sh" | bash -s

顯示最繁忙的java線程: -c

顯示當前cpu和內存使用狀況,包括全局和各個進程的。

-server #64位機器下默認

-Xms6000M #最小堆大小

-Xmx6000M #最大堆大小

-Xmn500M #新生代大小

-Xss256K #棧大小

-XX:PermSize=500M (JDK7)

-XX:MaxPermSize=500M (JDK7)

-XX:MetaspaceSize=128m (JDK8)

-XX:MaxMetaspaceSize=512m(JDK8)

-XX:SurvivorRatio=65536

-XX:MaxTenuringThreshold=0 #晉陞到老年代需要的存活次數,設置為0時,survivor區失去作用,一次minor gc,eden中存活的對象就會進入老年代,默認是15,使用CMS時默認是4

-Xnoclassgc #不做類的gc

#-XX:+PrintCompilation #輸出jit編譯情況,慎用

-XX:+TieredCompilation #啟用多層編譯,jd8默認開啟

-XX:CICompilerCount=4 #編譯器數目增加

-XX:-UseBiasedLocking #取消偏向鎖

-XX:AutoBoxCacheMax=20000 #自動裝箱的緩存數量,如int默認緩存為-128~127

-Djava.security.egd=file:/dev/./urandom #替代默認的/dev/random阻塞生成因子

-XX:+AlwaysPreTouch #啟動時訪問並置零內存頁面,大堆時效果比較好

-XX:-UseCounterDecay #禁止JIT調用計數器衰減。默認情況下,每次GC時會對調用計數器進行砍半的操作,導致有些方法一直是個溫熱,可能永遠都達不到C2編譯的1萬次的閥值。

-XX:ParallelRefProcEnabled=true # 默認為false,并行的處理Reference對象,如WeakReference

-XX:+DisableExplicitGC #此參數會影響使用堆外內存,會造成oom,如果使用NIO,請慎重開啟

#-XX:+UseParNewGC #此參數其實在設置了cms后默認會啟用,可以不用設置

-XX:+UseConcMarkSweepGC #使用cms垃圾回收器

#-XX:+UseCMSCompactAtFullCollection #是否在fullgc是做一次壓縮以整理碎片,默認啟用

-XX:CMSFullGCsBeforeCompaction=0 #full gc觸發壓縮的次數

#-XX:+CMSClassUnloadingEnabled #如果類載入不頻繁,也沒有大量使用String.intern方法,不建議打開此參數,況且jdk7后string pool已經移動到了堆中。開啟此項的話,即使設置了Xnoclassgc也會進行class的gc, 但是某種情況下會造成bug:https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&uact=8&ved=0ahUKEwjR16Wf6MHQAhWLrVQKHfLdCe4QFgg8MAQ&url=https%3A%2F%2Fblogs.oracle.com%2Fpoonam%2Fentry%2Fjvm_hang_with_cms_collector&usg=AFQjCNFNtkw6jHM-uyz-Wjri3LtAVXWJ8g&sig2=BFxSfHc-AIek18fEhY07mg。

#-XX:+CMSParallelRemarkEnabled #并行標記, 默認開啟, 可以不用設置

#-XX:+CMSScavengeBeforeRemark #強制remark之前開始一次minor gc,減少remark的暫停時間,但是在remark之後也將立即開始又一次minor gc

-XX:CMSInitiatingOccupancyFraction=90 #觸發full gc的內存使用百分比

-XX:+PrintClassHistogram #列印類統計信息

-XX:+PrintHeapAtGC #列印gc前後的heap信息

-XX:+PrintGCDetails #以下都是為了記錄gc日誌

-XX:+PrintGCDateStamps

-XX:+PrintGCApplicationStoppedTime #列印清晰的GC停頓時間外,還可以列印其他的停頓時間,比如取消偏向鎖,class 被agent redefine,code deoptimization等等

-XX:+PrintTenuringDistribution #列印晉陞到老年代的年齡自動調整的情況(并行垃圾回收器啟用UseAdaptiveSizePolicy參數的情況下以及其他垃圾回收期也會動態調整,從最開始的MaxTenuringThreshold變成佔用當前堆50%的age)

#-XX:+UseAdaptiveSizePolicy # 此參數在并行回收器時是默認開啟的會根據應用運行狀況做自我調整,如MaxTenuringThreshold、survivor區大小等,其他情況下最好不要開啟

#-XX:StringTableSize #字元串常量池表大小(hashtable的buckets的數目),java 6u30之前無法修改固定為1009,後面的版本默認為60013,可以通過此參數設置

-XX:GCTimeLimit=98 #gc佔用時間超過多少拋出OutOfMemoryError

-XX:GCHeapFreeLimit=2 #gc回收后小於百分之多少拋出OutOfMemoryError

-Xloggc:/home/logs/gc.log

你是如何在高樓逃生的?

你被困在一幢200米高的大樓的樓頂。你手裡有一根150米長的繩子和一把瑞士軍刀。你所站的地方有一個鐵鉤子。往樓下看時,你發現大樓正中間,也就是100米高的位置上,有一個可以落腳的金屬支架,上面還有另外一個鉤子。你怎樣才能利用這些東西安全到達地面?



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦