Java JVM 調優

文章目錄

1. 工具

  1. jps:查看本機java進程信息。
  2. jstack:打印線程的棧信息,製作線程dump文件。
  3. jmap:打印內存映射,製作堆dump文件
  4. jstat:性能監控工具
  5. jhat:內存分析工具

2. 優化

jvm優化
jvisualvm 查看堆內存
jstack 打印堆dump

S0和S1一般多大,靠什麼參數來控制,有什麼變化?

一般來說很小,我們大概知道它與Young差不多相差一倍的比例,設置的的參數主要有兩個:
-XX:SurvivorRatio=8
-XX:InitialSurvivorRatio=8

第一個參數是Eden和Survivor區域比重,注意是一個Survivor的的大小,如果將其設置爲8,則說明Eden區是一個Survivor區的8倍,換句話說S0或S1空間是整個Young空間的1/10,剩餘的80%由Eden區域來使用。

第二個參數是Young/S0的比值,當其設置爲8時,表示s0或s1佔整個Young空間的12.5%。

服務器配置:8 CPU, 8G MEM, JDK 1.6.X

參數方案:
-server -Xmx3550m -Xms3550m -Xmn1256m -Xss128k -XX:SurvivorRatio=6 -XX:MaxPermSize=256m -XX:ParallelGCThreads=8 -XX:MaxTenuringThreshold=0 -XX:+UseConcMarkSweepGC

調優說明:

堆內存大小
-Xmx 與 -Xms 相同以避免JVM反覆重新申請內存。
-Xmx 的大小約等於系統內存大小的一半,即充分利用系統資源,又給予系統安全運行的空間。

-Xmn1256m 設置年輕代大小爲1256MB。此值對系統性能影響較大,Sun官方推薦配置年輕代大小爲整個堆的3/8
-Xss128k 設置較小的線程棧以支持創建更多的線程,支持海量訪問,並提升系統性能。

-XX:SurvivorRatio=6 設置年輕代中Eden區與Survivor區的比值。系統默認是8,根據經驗設置爲6,則2個Survivor區與1個Eden區的比值爲2:6,一個Survivor區佔整個年輕代的1/8。

-XX:ParallelGCThreads=8 配置並行收集器的線程數,即同時8個線程一起進行垃圾回收。此值一般配置爲與CPU數目相等。

-XX:MaxTenuringThreshold=0 設置垃圾最大年齡(在年輕代的存活次數)。如果設置爲0的話,則年輕代對象不經過Survivor區直接進入年老代。對於年老代比較多的應用,可以提高效率;如果將此值設置爲一個較大值,則年輕代對象會在Survivor區進行多次複製,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概率。根據被海量訪問的動態Web應用之特點,其內存要麼被緩存起來以減少直接訪問DB,要麼被快速回收以支持高併發海量請求,因此其內存對象在年輕代存活多次意義不大,可以直接進入年老代,根據實際應用效果,在這裏設置此值爲0。

-XX:+UseConcMarkSweepGC 設置年老代爲併發收集。CMS(ConcMarkSweepGC)收集的目標是儘量減少應用的暫停時間,減少Full GC發生的機率,利用和應用程序線程併發的垃圾回收線程來標記清除年老代內存,適用於應用中存在比較多的長生命週期對象的情況。

todo 待補充

參考:
JVM(Java虛擬機)優化大全和案例實戰

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