4-JVM 參數

JVM 參數

  1. 標準參數:不會隨着jdk版本的變化而變化。好比:java -version、java -help
  2. 非標準參數:隨着JDK版本的變化而變化。java

    -X參數【用的較少】非標準參數,也就是在JDK各個版本中可能會變更shell

    # 修改執行方式
    # compiled 編譯執行方式,第一次使用就編譯成本地代碼
    java -Xcomp -version
    # interpreted 解釋執行方式
    java -Xini -version
    # mixed 默認的混合執行方式,混合模式,JVM本身來決定
    java -Xmixed -version

    -XX參數【用的最多:JVM調優額Debug】非標準化參數,相對不穩定。併發

    boolean類型app

    格式:-XX:[+-]<name>              +或-表示啓用或者禁用name屬性
    好比:
    -XX:+UseConcMarkSweepGC          表示啓用CMS類型的垃圾回收器
    -XX:+UseG1GC                       表示啓用G1類型的垃圾回收器
    # 設置JVM使用垃圾收集器 +:使用,-:未使用
    -XX:+/-UseG1GC

    非boolean類型wordpress

    格式:-XX<name>=<value>表示name屬性的值是value
    好比:
    -XX:MaxGCPauseMillis=500
    # 設置初始堆內存
    -XX:initialHeapSize=100M # 簡寫方式 ===>>> -Xms100M
    # 設置最大堆內存
    -XX:MaxHeapSize=100M # 簡寫方式 ===>>> -Xmx100M

打印出JAVA進程中全部JVM的參數:工具

  • 執行命令 java -XX:+PrintFlagsFinal -version 便可打印出JVM中各參數。因爲參數較多,建議將參數放入文件中查看: java -XX:+PrintFlagsFinal -version > xxx.txt
  • 使用 jinfo -flag ${參數名} ${PID} 也可查看對應JVM參數值
-XX:+PrintFlagsFinal

如何設置JVM參數:開發工具

如下方式是JAVA進程還未啓動spa

  1. 在開發工具中,好比IDEA中的啓動配置項中 VM options
  2. SpringBoot jar包 啓動的命令 java -jar -Xms100M test.jar
  3. 在java語言的中間件中如Tomcat中的 bin 目錄下的 catalina.sh/bat 中的JAVA_OPTIONS=""

如下方式是當JAVA進程已經啓動後該如何設置線程

  1. 實時修改某個JVM參數的值 jinfo修改(參數只有被標記爲manageable的flags能夠被實時修改)

經常使用參數:日誌

參數 含義 說明
XX:CICompilerCount=3 最大並行編譯數 若是設置大於1,雖然編譯速度會提升,可是一樣影響系統穩定性,會增長JVM崩潰的可能
-XX:InitialHeapSize=100M 初始化堆大小 簡寫-Xms100M
-XX:MaxHeapSize=100M 最大堆大小 簡寫-Xm x 100M
-XX:NewSize=20M 設置年輕代的大小
-XX:MaxNewSize=50M 年輕代最大大小
-XX:OldSize=50M 設置老年代大小
-XX:MetaspaceSize=50M 設置方法區大小
-XX:MaxMetaspaceSize=50M 方法區最大大小
-XX:+UseParallelGC 使用UseParallelGC 新生代,吞吐量優先
-XX:+UseParallelOldGC 使用UseParallelOldGC 老年代,吞吐量優先
-XX:+UseConcMarkSweepGC 使用CMS 老年代,停頓時間優先
-XX:+UseG1GC 使用G1GC 新生代,老年代,停頓時間優先
-XX:NewRatio 新老生代的比值 好比-XX:Ratio=4,則表示新生代:老年代=1:4,也就是新生代佔整個堆內存的1/5
-XX:SurvivorRatio 兩個S區和Eden區的比值 好比-XX:SurvivorRatio=8,也就是(S0+S1):Eden=2:8,也就是一個S佔整個新生代的1/10
-XX:+HeapDumpOnOutOfMemoryError 啓動堆內存溢出打印 當JVM堆內存發生溢出時,也就是OOM,自動生成dump文件
-XX:HeapDumpPath=heap.hprof 指定堆內存溢出打印目錄 表示在當前目錄生成一個heap.hprof文件
XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStampsXloggc:$CATALINA_HOME/logs/gc.log 打印出GC日誌 可使用不一樣的垃圾收集器,對比查看GC狀況
-Xss128k 設置每一個線程的堆棧大小 經驗值是3000-5000最佳
-XX:MaxTenuringThreshold=6 提高年老代的最大臨界值 默認值爲 15
-XX:InitiatingHeapOccupancyPercent 啓動併發GC週期時堆內存使用佔比 G1之類的垃圾收集器用它來觸發併發GC週期,基於整個堆的使用率,而不僅是某一代內存的使用比. 值爲 0 則表示」一直執行GC循環」. 默認值爲 45.
-XX:G1HeapWastePercent 容許的浪費堆空間的佔比 默認是10%,若是併發標記可回收的空間小於10%,則不會觸發MixedGC。
-XX:MaxGCPauseMillis=200ms G1最大停頓時間 暫停時間不能過小,過小的話就會致使出現G1跟不上垃圾產生的速度。最終退化成Full GC。因此對這個參數的調優是一個持續的過程,逐步調整到最佳狀態
-XX:ConcGCThreads=n 併發垃圾收集器使用的線程數量 默認值隨JVM運行的平臺不一樣而不一樣
-XX:G1MixedGCLiveThresholdPercent=65 混合垃圾回收週期中要包括的舊區域設置佔用率閾值 默認佔用率爲 65%
-XX:G1MixedGCCountTarget=8 設置標記週期完成後,對存活數據上限爲G1MixedGCLIveThresholdPercent 的舊區域執行混合垃圾回收的目標次數 默認8次混合垃圾回收,混合回收的目標是要控制在此目標次數之內
XX:G1OldCSetRegionThresholdPercent=1 描述Mixed GC時,Old Region被加入到CSet中 默認狀況下,G1只把10%的Old Region加入到CSet中

趙小胖我的博客

相關文章
相關標籤/搜索