22.jvm參數優化
阿新 • • 發佈:2017-10-19
java從入門到精通 java基礎 java教程 java java編程 1.
2.
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.zookeeper
JVM參數設置:
-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false
2.apollo
JVM參數設置:
-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參數優化