1. 程式人生 > >22.jvm參數優化

22.jvm參數優化

java從入門到精通 java基礎 java教程 java java編程

22.jvm參數優化

轉載請保留原文鏈接: http://dashidan.com/article/java/basic/jvm參數優化.html

Java虛擬機簡稱JVM(Java Virtual Machine).像一個構造十分精密的儀器, 提供了一些可以調控機器運行狀態的參數. 這些參數需要根據自己的實際的生產環境的要求來設置.就像頭文字D中的那輛車86, 只有經過對應的配置和調試, 才能達到跑車的最優性能.


不同的廠家的SDK有不同的配置, 我們以sun公司出品的官方JDK為例介紹下JVM參數.

① 標準配置選項

-d32          使用 32 位數據模型 (如果可用)
-d64          使用 64 位數據模型 (如果可用)
-server       選擇 "server" VM
              默認 VM 是 server.

-cp <目錄和 zip/jar 文件的類搜索路徑>
-classpath <目錄和 zip/jar 文件的類搜索路徑>
              用 ; 分隔的目錄, JAR 檔案
              和 ZIP 檔案列表, 用於搜索類文件.
-D<名稱>=<值>
              設置系統屬性
-verbose:[class|gc|jni]
              啟用詳細輸出
-version      輸出產品版本並退出
-version:<值>
              警告: 此功能已過時, 將在
              未來發行版中刪除.
              需要指定的版本才能運行
-showversion  輸出產品版本並繼續
-jre-restrict-search | -no-jre-restrict-search
              警告: 此功能已過時, 將在
              未來發行版中刪除.
              在版本搜索中包括/排除用戶專用 JRE
-? -help      輸出此幫助消息
-X            輸出非標準選項的幫助
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
              按指定的粒度啟用斷言
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
              禁用具有指定粒度的斷言
-esa | -enablesystemassertions
              啟用系統斷言
-dsa | -disablesystemassertions
              禁用系統斷言
-agentlib:<libname>[=<選項>]
              加載本機代理庫 <libname>, 例如 -agentlib:hprof
              另請參閱 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<選項>]
              按完整路徑名加載本機代理庫
-javaagent:<jarpath>[=<選項>]
              加載 Java 編程語言代理, 請參閱 java.lang.instrument
-splash:<imagepath>
              使用指定的圖像顯示啟動屏幕

② 非標準配置選項

-Xmixed           混合模式執行 (默認)
-Xint             僅解釋模式執行
-Xbootclasspath:<用 ; 分隔的目錄和 zip/jar 文件>
                  設置搜索路徑以引導類和資源
-Xbootclasspath/a:<用 ; 分隔的目錄和 zip/jar 文件>
                  附加在引導類路徑末尾
-Xbootclasspath/p:<用 ; 分隔的目錄和 zip/jar 文件>
                  置於引導類路徑之前
-Xdiag            顯示附加診斷消息
-Xnoclassgc       禁用類垃圾收集
-Xincgc           啟用增量垃圾收集
-Xloggc:<file>    將 GC 狀態記錄在文件中 (帶時間戳)
-Xbatch           禁用後臺編譯
-Xms<size>        設置初始 Java 堆大小 示例:
                    -Xms6291456
                    -Xms6144k
                    -Xms6m
                    -Xms1g
-Xmx<size>        設置最大 Java 堆大小
-Xss<size>        設置 Java 線程堆棧大小
-Xprof            輸出 cpu 配置文件數據
-Xfuture          啟用最嚴格的檢查, 預期將來的默認值
-Xrs              減少 Java/VM 對操作系統信號的使用 (請參閱文檔)
-Xcheck:jni       對 JNI 函數執行其他檢查
-Xshare:off       不嘗試使用共享類數據
-Xshare:auto      在可能的情況下使用共享類數據 (默認)
-Xshare:on        要求使用共享類數據, 否則將失敗.
-XshowSettings    顯示所有設置並繼續
-XshowSettings:all
                  顯示所有設置並繼續
-XshowSettings:vm 顯示所有與 vm 相關的設置並繼續
-XshowSettings:properties
                  顯示所有屬性設置並繼續
-XshowSettings:locale
                  顯示所有與區域設置相關的設置並繼續

③ JVM性能優化示例

  • 高吞吐量(Higher Throughput)JVM性能優化示例:

    java -d64 -server -XX:+AggressiveOpts -XX:+UseLargePages -Xmn10g -Xms26g -Xmx26g

  • 低延遲(Lower Response Time)JVM性能優化示例:

    java -d64 -XX:+UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis=500 -XX:+PrintGCTimeStamps

④ 著名中間件jvm參數配置

1.zookeeperJVM參數設置:

-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-Xmx1000m
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.local.only=false

2.apolloJVM參數設置:

-ea
-server
-Xmx1G
-XX:+HeapDumpOnOutOfMemoryError
-XX:-UseBiasedLocking
-Dcom.sun.management.jmxremote

3.參數說明:

-XX:+HeapDumpOnOutOfMemoryError參數表示當JVM發生內存溢出時,自動生成信息文件.
-XX:HeapDumpPath=${path} 生成信息文件的路徑.也可以指定文件名稱.例如:
    -XX:HeapDumpPath=${path}/java_heapdump.hprof. 如果不指定文件名,默認名為:java_<pid>_<date>_<time>_heapDump.hprof.
-Dcom.sun.management.jmxremote
    通過JMX的方式遠程監控JVM的運行情況.

⑤ 建議配置

以下是個人建議, 不一定使用全部場景.根據自己的應用場景配置.

-d64
-Xms4g
-Xmx4g
-XX:+HeapDumpOnOutOfMemoryError
-Dcom.sun.management.jmxremote

不要過分糾結

有時采用更高配置的硬件更有效.

⑥ 參考文章

配置jvm和java參數

java技術文檔

⑦ 相關文章

Java從入門到精通索引


本文出自 “13402341” 博客,請務必保留此出處http://13412341.blog.51cto.com/13402341/1974305

22.jvm參數優化