1. 程式人生 > >jvm常用調優策略

jvm常用調優策略

jvm引數型別:
(瞭解 不常用)
-xint:解釋執行
-Xcomp:編譯執行
-Xmixed:混合模式,jvm自己決定使用哪種方式

(重點)
分為boolean型別:
-XX:[+-]<name> 表示是否啟用jvm的某個引數

非boolean型別:
-XX:<name> = <value> 表示name屬性的值為value

-Xms:初始對記憶體大小(-XX:initialHeapSize)
-Xmx:最大堆記憶體大小(-XX:MaxHeapSize)

jps:檢視java的相關程序

jinfo:產看正在執行的jvm的引數
格式如下:
-flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message
eg : jinfo -flag MaxHeapSize 2122 會打印出jvm的最大堆記憶體值

jstat:檢視jvm的統計資訊(包括類載入資訊,垃圾收集資訊,jit編譯資訊)
(1)檢視類載入資訊 ; 
jstat -class jvm程序id internal(表示隔多少ms查詢一次) time(一共查詢多少次)
eg : jstat -class 2122 1000 10
(2)檢視垃圾收集資訊:
jstat -gc jvmPid 1000 10
jstat -gcutil jvmPid 1000 10
jstat -gccause jvmPid 1000 10

jmap + MAT實戰記憶體溢位
<1>自動匯出
( 1 )設定jvm在記憶體溢位時dump出記憶體映像檔案
jinfo -flag +HeapDumpOnOutOfMemoryError jvmPid
( 2 )設定dump出的檔案位置:
jinfo -flag HeapDumpPath=路徑 jvmPid

<2>手動匯出
jmp -dump:live,format=b,file=檔案匯出路徑 jvmPid(或者是執行緒id,以上都是)

實戰死迴圈,死鎖
<1>使用top命令,檢視那些程序cpu標高
<2>使用top -p 程序pid -H 產看該程序 上的所有執行緒
<3>printf "%x" 十進位制的執行緒id 將十進位制的執行緒id 轉換為16進位制的
<4>jstack pid 來檢視具體的執行緒狀態

gc調優:
-Xms32M 最小堆記憶體
-Xmx32M 最大堆記憶體
-XX:NewSize 新生代大小
-XX:MaxNewSize 最大新生代大小
-XX:NewRatio 新生代老年代之間的比例
-XX:SurvivorRatio eden survivor之間的比例
-XX:MetaSpaceSize MetaSpace大小
-XX:MaxMetaSpaceSize metaspace最大空間
-XX:+UseCompressedClassPointers 啟用ccs空間
-XX:CompressedClassSpaceSize ccs的大小
-XX:InitialCodeCacheSize codeCache的大小
-XX:ReservedCodeCacheSize codecache最大大小
-XX:ParallelGCThreads=n 設定並行垃圾收集器的執行緒數 cpu > 8 預設開啟 5/8 cpu小於8 預設開啟的數量與cpu相同

開啟垃圾收集器:
webServer模式下主要使用並行收集器和併發收集器
並行收集器:parallel scavenge 特性:自適應的調整
自適應調整的引數,每次增大或減小多少
-XX:YoungGenerationSizeIncrement=20 young區每次增大20%
-XX:TenuredGenerationSizeIncrement=20 old區的調整
-XX:AdaptiveSizeDecrementScaleFactor=4 每個區減少的比例

併發收集器:cms g1

ps收集器 又叫做吞吐量優先收集器 使用兩個引數來達到指定的吞吐量
-XX:MaxGCPauseMillis 最大gc停頓時間 這個引數的設定是以犧牲吞吐量為代價的
-XX:GCTimeRatio gc佔用的時間 計算公式為 1/(1 + 19) 19就是gc佔用的時間

(1)開啟序列收集器:-XX:+UseSerialGC  -XX:+UseSerialOldGC
(2)開啟並行收集器:-XX:+UseParallelGC -XX:+UseParallelOldGC
(3)開啟併發收集器:-XX:+UseConcMarkSweepGC -XX:+UseParNewGC

cms相關引數:
-XX:ConcGCThreads 併發的gc執行緒數(與應用程式併發執行的gc執行緒)
-XX:+UseCMSCompactAtFullCollection fullgc之後進行空間壓縮
-XX:CMSFullGCsBeforeCompaction 多少次fullgc之後進行一次壓縮
-XX:CMSInitiatingOccupancyFranction old區佔用多少之後觸發fullgc
-XX:+UseCMSInitiatingOccpancyOnly 觸發fullgc的old區的佔有率是否可以調
-XX:+CMSScavengeBeforeRemark fullgc之前先做younggc
-XX:+CMSClassUnloadingEnabled:啟用回收perm區

g1相關引數:
-XX:UseG1GC 開啟g1gc
-XX:G1HeapRegionSize=n region的大小 1-32m之間 2048個
-XX:MaxGCPauseMillis=200 最大停頓時間
-XX:G1NewSizePercent young區大小
-XX:G1MaxNewSizePercent young區最大大小
-XX:G1ReservePercent=10 保留young區中 to空間的大小,防止to空間溢位
-XX:ParallelGCThreads=n 垃圾回收的並行執行緒數,用在初始標記和最終標記
-XX:ConcGCThreads=n 併發的執行緒數=1/4*並行的執行緒數

-XX:InitiatingHeapOccupancyPercent=45 堆佔有率達到多少觸發併發標記,預設為45%
-XX:G1MixedGCLiveThresholdPercent=85 old region中存活的物件達到多少觸發mixGC 預設85%
-XX:G1HeapWastePercent=5 併發標記之後得到可以回收的垃圾空間,垃圾空間大於該值觸發mixGC(mixgc會吧oldregion中的物件新增到eden 和 survior中)
-XX:G1MixedGCCountTarget=8 mixgc的次數 預設是8次
-XX:G1OldCSetRegionThresholdPercent=10 mixGC中,最多有多少oldRegion區可以放在CSet中

g1最佳實踐:
(1)不要顯示的設定-Xmn -XX:NewRatio等值的大小,設定之後,會覆蓋掉-XX:MaxGCPauseMillis的值
(2)-XX:MaxGCPauseMillis 不要設定的太嚴格,太嚴格會影響到吞吐量


如何選擇垃圾收集器:
(1)優先調整堆的大小,讓jvm自己選擇
(2)記憶體小於100M,使用序列垃圾收集器
(3)單核沒有停頓時間的要求,使用序列,或者jvm自己選擇
(4)允許停頓時間超過1s 選擇並行或者jvm自己選擇
(5)若響應時間重要,使用併發收集器

視覺化gc日誌:
列印日誌相關的引數:
-XX:+PrintGCDetails 顯示gc詳細資訊
-XX:+PrintGCTimeStamps gc時間戳
-XX:+PrintGCDateStamps gc開始的時間
-XLoggc:$CATALINA_HOME/logs/gc.log gc的存放位置
-XX:+PrintHeapAtGC 發生gc時打印出堆疊資訊
-XX:+PrintTenuringDistribution 打印出物件的分佈情況
(1)http://gceasy.io
(2)GCViewer

parallelGC調優:
首先根據工具來增大頻繁gc的區域比如增大perm區的大小,或者metaspace的大小
之後使用引數-XX:GCTimeRatio -XX:MaxGCPauseMillis 來自動的調整
最後使用-XX:YoungGenerationSizeIncrement 來調整每次youngGC之後young區的大小

JVM位元組碼指令:
 

相關推薦

jvm常用調策略

jvm引數型別: (瞭解 不常用) -xint:解釋執行 -Xcomp:編譯執行 -Xmixed:混合模式,jvm自己決定使用哪種方式 (重點) 分為boolean型別: -XX:[+-]<name> 表示是否啟用jvm的某個引數 非boolean型別: -X

JVM常用調案例

在本文中會介紹一些常用的JVM調優思路以及調優方法,這些方法是為了解決某個具體問題,提高某個區域性效能而特別設定的。 使用它們可能會對其他效能指標產生不良的影響,應該在實際應用中,根據具體情況進行折中和權衡。總結自《Java程式效能優化》 1.將新物件預留在新生代

JVM分析工具以及JVM常用調引數

#檢視java中的所有執行緒 top -H -p pid[程序號] pidstat -p pid -u -t[執行緒級] #檢視啟動java程序 jps #檢視Java記憶體資訊  jmap jmap -heap pid   ===>檢視Java程序的堆分配資訊 jma

JVM常用調引數

-Xmx:最大JVM可用記憶體, 例:-Xmx4g -Xms:最小JVM可用記憶體, 例:Xms4g -Xmn:年輕代記憶體大小,例:-Xmn2560m -XX:PermSize:永久代記憶體大小,該值太大會導致fullGC時間過長,太小將增加fullGC頻率,例:-XX:PermSize=128m -

JVM常用調工具介紹

  前言 王子在之前的JVM文章中已經大體上把一些原理性問題說清楚了,今天主要是介紹一些實際進行JVM調優工作的工具和命令,不會深入講解,因為網上資料很多,篇幅可能不長,但都是實用的內容,小夥伴們有不清楚的可以自行查詢資料。   jstat命令 jstat命令可以檢視到很多的jvm資訊,詳

JVM調系列:(五)JVM常用調試參數和工具

框架 break 統計 進程 -i 內存 文件的 /etc/ action 轉自:http://blog.csdn.net/opensure/article/details/46715769 JVM常用調試參數: –verbose:gc在虛擬機發生內存

JVM調(四)常用調方案

由於Full GC的成本要遠遠高於Minor GC,因此儘可能的將物件分配在新生代是一項明智的選擇。 大部分情況下,jvm會嘗試在eden區域分配物件,但是因為空間緊張等問題,很可能不得不將部分年輕物件提前向老年代壓縮。因此,可以為程式分配一個合理的新生代空間,以最大限度避免新物件直接進入老年代的情

JVM綜合調匯總

rom heap 減少 無限 sco 數據 gcd hold total 一、堆大小設置   JVM 中最大堆大小有三方面限制:   1. 相關操作系統的數據模型(32-bt還是64-bit)限制;   2. 系統的可用虛擬內存限制;   3. 系統的可用物理內存限制。  

ifeve.com 南方《JVM 效能調實戰之:使用阿里開源工具 TProfiler 在海量業務程式碼中精確定位效能程式碼》

https://blog.csdn.net/defonds/article/details/52598018 多次拉取 JStack,發現很多執行緒處於這個狀態:    at jrockit/vm/Allocator.getNewTla(JJ)V(Native Method) 

JAVA JVM引數調、以及回收器

[轉]JVM系列三:JVM引數設定、分析 不管是YGC還是Full GC,GC過程中都會對導致程式執行中中斷,正確的選擇不同的GC策略,調整JVM、GC的引數,可以極大的減少由於GC工作,而導致的程式執行中斷方面的問題,進而適當的提高Java程式的工作效率。但是調整GC是以個極為複雜的過程,由於

JVM效能調監控工具jps、jstack、jstat、jmap、jinfo使用

 現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ...... &n

map端和reduce端引數的調策略

原文https://blog.csdn.net/qq_26442553/article/details/78760338 使用hadoop進行大資料運算,當資料量及其大時,那麼對MapReduce效能的調優重要性不言而喻。尤其是Shuffle過程中的引數配置對作業的總執行時間影響特別大。下面基於

JVM效能調監控工具jps、jstack、jmap、jhat、jstat、hprof詳解

來源:https://my.oschina.net/feichexia/blog/196575 現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention)

1.linux使用自帶的命令執行spoon寫好的job命令以及效能調策略

1. [[email protected] data_integration]# nohup ./kitchen.sh /file file/desktopstatistics.kjb &[1] 16537 [[email protected] data_integrat

HBase 核心元件協調及RegionServer JVM引數調-OLAP商業環境實戰

本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。版權宣告:禁止轉載,歡迎學習。QQ郵箱地址:[email protected],如有任何商業交流,可隨時聯絡。 1 弱化的Master

JVM效能調監控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解,以及例子

現實企業級Java開發中,有時候我們會碰到下面這些問題: OutOfMemoryError,記憶體不足 記憶體洩露 執行緒死鎖 鎖爭用(Lock Contention) Java程序消耗CPU過高 ......     這

JVM快速調手冊之二: 常見的垃圾收集器

如果說收集演算法是記憶體回收的方法論,那麼垃圾收集器就是記憶體回收的具體實現。 Java虛擬機器規範中對垃圾收集器應該如何實現並沒有任何規定,因此不同的廠商、不同版本的虛擬機器所提供的垃圾收集器都可能會有很大差別,並且一般都會提供引數供使用者根據自己的應用特點和要求組合出各個年代所使用的

JVM快速調手冊之一: 記憶體結構(堆記憶體和非堆記憶體)

圖為Java虛擬機器執行時的資料區: 1.方法區 也稱"永久代” 、“非堆”, 它用於儲存虛擬機器載入的類資訊、常量、靜態變數、是各個執行緒共享的記憶體區域。預設最小值為16MB,最大值為64MB(未驗證),可以通過-XX:PermSize 和 -XX:MaxPermSize

JVM記憶體調 - 淺析 20181121

一.引言 JVM在整個jdk中處於最底層,負責於作業系統的互動,用來遮蔽作業系統環境,提供一個完整的Java執行環境,因此也叫虛擬計算機。作業系統執行JVM是通過jdk中Java.exe來完成的。 每個使用Java的開發者都知道Java位元組碼是在JRE中執行(JRE: J

jvm記憶體調處理機制

1.棧和堆 棧是執行時的單位,解決程式如何執行,代表處理邏輯 堆是儲存單位,解決資料儲存問題,代表資料 2. 分配記憶體按照8的整數倍 物件的引用: 強引用(宣告物件時虛擬機器生成的引用,不會被回收), 軟引用(快取,剩餘記憶體不足時被回收) 弱引用(一定被回收) 4.垃圾回