jvm工具、引數調優&除錯技巧-實用!
從百度文庫中下載的資料,覺得很實用,分享給大家。
目 錄
表格列表
一、 JVM工具
1. jps:虛擬機器程序狀況工具
比較常用的引數:
(1) -q :只顯示pid,不顯示class名稱,jar檔名和傳遞給 main 方法的引數
$> jps -q
28680
23789
23651
(2) -m :輸出傳遞給 main 方法的引數,在嵌入式jvm上可能是null
$> jps -m
28715 Jps -m
23789 BossMain
23651 Resin -socketwait 32768 -stdout/data/aoxj/resin/log/stdout.log -stderr /data/aoxj/resin/log/stderr.log
(3) -l :輸出應用程式main class的完整package名或者應用程式的jar檔案完整路徑名
$> jps -l
28729 sun.tools.jps.Jps
23789 com.asiainfo.aimc.bossbi.BossMain
23651 com.caucho.server.resin.Resin
(4) -v :輸出傳遞給JVM的引數
$> jps -v
23789 BossMain
28802 Jps -Denv.class.path=/data/aoxj/bossbi/twsecurity/java/trustwork140.jar:/data/aoxj/bossbi/twsecurity/java/:/data/aoxj/bossbi/twsecurity/java/twcmcc.jar:/data/aoxj/jdk15/lib/rt.jar:/data/aoxj/jdk15/lib/tools.jar-Dapplication.home=/data/aoxj/jdk15 -Xms8m
23651 Resin -Xss1m-Dresin.home=/data/aoxj/resin -Dserver.root=/data/aoxj/resin-Djava.util.logging.manager=com.caucho.log.LogManagerImpl-Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl
詳細情況請參考sun官方文件。
http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html
2. jstat:虛擬機器統計資訊監視工具
jstat工具特別強大,有眾多的可選項,詳細檢視堆內各個部分的使用量,以及載入類的數量。使用時,需加上檢視程序的程序id,和所選引數。以下詳細介紹各個引數的意義。
jstat -class pid:顯示載入class的數量,及所佔空間等資訊。
jstat -compiler pid:顯示VM實時編譯的數量等資訊。
jstat -gc pid:可以顯示gc的資訊,檢視gc的次數,及時間。其中最後五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。
jstat -gccapacity:可以顯示,VM記憶體中三代(young,old,perm)物件的使用和佔用大小,如:PGCMN顯示的是最小perm的記憶體使用量,PGCMX顯示的是perm的記憶體最大使用量,PGC是當前新生成的perm記憶體佔用量,PC是但前perm記憶體佔用量。其他的可以根據這個類推, OC是old內純的佔用量。
jstat -gcnew pid:new物件的資訊。
jstat -gcnewcapacity pid:new物件的資訊及其佔用量。
jstat -gcold pid:old物件的資訊。
jstat -gcoldcapacity pid:old物件的資訊及其佔用量。
jstat -gcpermcapacity pid: perm物件的資訊及其佔用量。
jstat -util pid:統計gc資訊統計。
jstat -printcompilation pid:當前VM執行的資訊。
除了以上一個引數外,還可以同時加上兩個數字,如:jstat -printcompilation 3024250 6是每250毫秒列印一次,一共列印6次,還可以加上-h3每三行顯示一下標題。
3. jinfo:java配置資訊工具
4. jhat:虛擬機器堆轉儲快照分析工具
jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [[email protected]]remote-hostname-or-IP
jmap-dump:format=b,file=c:\f1.bin 9527可以將9527程序的記憶體heap輸出出來到f1.bin檔案裡。
jmap -histo pid
分析堆快照,一般先用jmap生成堆快照檔案,然後把這個檔案拖進eclipse即可,分析的速度非常快。
二、 JVM引數
表格1 除錯引數
引數及其預設值 |
描述 |
-XX:-CITime |
列印消耗在JIT編譯的時間 |
-XX:ErrorFile=./hs_err_pid<pid>.log |
儲存錯誤日誌或者資料到檔案中 |
-XX:-ExtendedDTraceProbes |
開啟solaris特有的dtrace探針 |
-XX:HeapDumpPath=./java_pid<pid>.hprof |
指定匯出堆資訊時的路徑或檔名 |
-XX:-HeapDumpOnOutOfMemoryError |
當首次遭遇OOM時匯出此時堆中相關資訊 |
-XX:OnError="<cmd args>;<cmd args>" |
出現致命ERROR之後執行自定義命令 |
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" |
當首次遭遇OOM時執行自定義命令 |
-XX:-PrintClassHistogram |
遇到Ctrl-Break後列印類例項的柱狀資訊,與jmap -histo功能相同 |
-XX:-PrintConcurrentLocks |
遇到Ctrl-Break後列印併發鎖的相關資訊,與jstack -l功能相同 |
-XX:-PrintCommandLineFlags |
列印在命令列中出現過的標記 |
-XX:-PrintCompilation |
當一個方法被編譯時列印相關資訊 |
-XX:-PrintGC |
每次GC時列印相關資訊 |
-XX:-PrintGC Details |
每次GC時列印詳細資訊 |
-XX:-PrintGCTimeStamps |
列印每次GC的時間戳 |
-XX:-TraceClassLoading |
跟蹤類的載入資訊 |
-XX:-TraceClassLoadingPreorder |
跟蹤被引用到的所有類的載入資訊 |
-XX:-TraceClassResolution |
跟蹤常量池 |
-XX:-TraceClassUnloading |
跟蹤類的解除安裝資訊 |
-XX:-TraceLoaderConstraints |
跟蹤類載入器約束的相關資訊 |
表格2 JVM調優引數
引數及其預設值 |
描述 |
-XX:LargePageSizeInBytes=4m |
設定用於Java堆的大頁面尺寸 |
-XX:MaxHeapFreeRatio=70 |
GC後java堆中空閒量佔的最大比例 |
-XX:MaxNewSize=size |
新生成物件能佔用記憶體的最大值 |
-XX:MaxPermSize=64m |
老生代物件能佔用記憶體的最大值 |
-XX:MinHeapFreeRatio=40 |
GC後java堆中空閒量佔的最小比例 |
-XX:NewRatio=2 |
新生代記憶體容量與老生代記憶體容量的比例 |
-XX:NewSize=2.125m |
新生代物件生成時佔用記憶體的預設值 |
-XX:ReservedCodeCacheSize=32m |
保留程式碼佔用的記憶體容量 |
-XX:ThreadStackSize=512 |
設定執行緒棧大小,若為0則使用系統預設值 |
-XX:+UseLargePages |
使用大頁面記憶體 |
表格 3 行為引數
引數及其預設值 |
描述 |
-XX:-DisableExplicitGC |
禁止呼叫System.gc();但jvm的gc仍然有效 |
-XX:+MaxFDLimit |
最大化檔案描述符的數量限制 |
-XX:+ScavengeBeforeFullGC |
新生代GC優先於Full GC執行 |
-XX:+UseGCOverheadLimit |
在丟擲OOM之前限制jvm耗費在GC上的時間比例 |
-XX:-UseConcMarkSweepGC |
對老生代採用併發標記交換演算法進行GC |
-XX:-UseParallelGC |
啟用並行GC |
-XX:-UseParallelOldGC |
對Full GC啟用並行,當-XX:-UseParallelGC啟用時該項自動啟用 |
-XX:-UseSerialGC |
啟用序列GC |
-XX:+UseThreadPriorities |
啟用本地執行緒優先順序 |
表格4 JVM啟動引數
引數及其預設值 |
描述 |
-Xint |
設定jvm以解釋模式執行,所有的位元組碼將被直接執行,而不會編譯成本地碼。 |
-Xbatch |
關閉後臺程式碼編譯,強制在前臺編譯,編譯完成之後才能進行程式碼執行; 預設情況下,jvm在後臺進行編譯,若沒有編譯完成,則前臺執行程式碼時以解釋模式執行。 |
-Xbootclasspath:bootclasspath |
讓jvm從指定路徑(可以是分號分隔的目錄、jar、或者zip)中載入bootclass,用來替換jdk的rt.jar;若非必要,一般不會用到; |
-Xcheck:jni |
對JNI函式進行附加check;此時jvm將校驗傳遞給JNI函式引數的合法性,在原生代碼中遇到非法資料時,jmv將報一個致命錯誤而終止;使用該引數後將造成效能下降,請慎用。 |
-Xfuture |
讓jvm對類檔案執行嚴格的格式檢查(預設jvm不進行嚴格格式檢查),以符合類檔案格式規範,推薦開發人員使用該引數。 |
-Xnoclassgc |
關閉針對class的gc功能;因為其阻止記憶體回收,所以可能會導致OutOfMemoryError錯誤,慎用; |
-Xincgc |
開啟增量gc(預設為關閉);這有助於減少長時間GC時應用程式出現的停頓;但由於可能和應用程式併發執行,所以會降低CPU對應用的處理能力。 |
-Xloggc:file |
與-verbose:gc功能類似,只是將每次GC事件的相關情況記錄到一個檔案中,檔案的位置最好在本地,以避免網路的潛在問題。 若與verbose命令同時出現在命令列中,則以-Xloggc為準。 |
-Xmsn |
指定jvm堆的初始大小,預設為實體記憶體的1/64,最小為1M;可以指定單位,比如k、m,若不指定,則預設為位元組。 |
-Xmxn |
指定jvm堆的最大值,預設為實體記憶體的1/4或者1G,最小為2M;單位與-Xms一致。 |
-Xprof |
跟蹤正執行的程式,並將跟蹤資料在標準輸出輸出;適合於開發環境除錯。 |
-Xrs |
減少jvm對作業系統訊號(signals)的使用,該引數從1.3.1開始有效; 從jdk1.3.0開始,jvm允許程式在關閉之前還可以執行一些程式碼(比如關閉資料庫的連線池),即使jvm被突然終止; jvm關閉工具通過監控控制檯的相關事件而滿足以上的功能;更確切的說,通知在關閉工具執行之前,先註冊控制檯的控制handler,然後對CTRL_C_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, and CTRL_SHUTDOWN_EVENT這幾類事件直接返回true。 但如果jvm以服務的形式在後臺執行(比如servlet引擎),他能接收CTRL_LOGOFF_EVENT事件,但此時並不需要初始化關閉程式;為了避免類似衝突的再次出現,從jdk1.3.1開始提供-Xrs引數;當此引數被設定之後,jvm將不接收控制檯的控制handler,也就是說他不監控和處理CTRL_C_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, or CTRL_SHUTDOWN_EVENT事件。 |
-Xssn |
設定單個執行緒棧的大小,一般預設為512k。 |
上面這些引數中,比如-Xmsn、-Xmxn……都是我們效能優化中很重要的引數;
-Xprof、-Xloggc:file等都是在沒有專業跟蹤工具情況下排錯的好手;
1. set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9494,suspend=n,server=y -Xms256m -Xmx512m -XX:MaxPermSize=128m 2. mvn tomcat:run |
四、 參考/引用資料
相關推薦
jvm工具、引數調優&除錯技巧-實用!
從百度文庫中下載的資料,覺得很實用,分享給大家。 目 錄 表格列表 一、 JVM工具 1. jps:虛擬機器程序狀況工具 比較常用的引數: (1) -q :只顯示pid,不顯示class名稱,jar檔名
JVM引數調優八大技巧
這裡和大家分享一下JVM引數調優的八條經驗,JVM引數調優,這是很頭痛的問題,設定的不好,JVM不斷執行FullGC,導致整個系統變得很慢,網站停滯時間能達10秒以上,相信通過本文的學習你對JVM引數調優有新的認識。 例項講解JVM引數調優的八條經驗 本文將介紹J
JAVA JVM引數調優、以及回收器
[轉]JVM系列三:JVM引數設定、分析 不管是YGC還是Full GC,GC過程中都會對導致程式執行中中斷,正確的選擇不同的GC策略,調整JVM、GC的引數,可以極大的減少由於GC工作,而導致的程式執行中斷方面的問題,進而適當的提高Java程式的工作效率。但是調整GC是以個極為複雜的過程,由於
JVM記憶體結構--新生代及新生代裡的兩個Survivor區(下一輪S0與S1交換角色,如此迴圈往復)、常見調優引數
轉自http://www.cnblogs.com/duanxz/p/6076662.html 一、為什麼會有年輕代 我們先來屢屢,為什麼需要把堆分代?不分代不能完成他所做的事情麼?其實不分代完全可以,分代的唯一理由就是優化GC效能。你先想想,如果沒有分代,那我們
Java效能系一(JVM、垃圾回收、記憶體調優、常見引數)
一、什麼是JVM JVM是Java Virtual Machine(Java虛擬機器)的縮寫,JVM是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。 Java語言的一個非常重要的
HBase 核心元件協調及RegionServer JVM引數調優-OLAP商業環境實戰
本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。版權宣告:禁止轉載,歡迎學習。QQ郵箱地址:[email protected],如有任何商業交流,可隨時聯絡。 1 弱化的Master
JVM基礎系列教程|第五篇:Java服務GC引數調優案例
推薦視訊連結 本文介紹了一次生產環境的JVM GC相關引數的調優過程,通過引數的調整避免了GC卡頓對JAVA服務成功率的影響。 這段時間在整理jvm系列的文章,無意中發現本文,作者思路清晰通過步步分析最終解決問題。我個人特別喜歡這種實戰類的內容,經原作者的授權
超引數調優方法:網格搜尋、隨機搜尋、貝葉斯優化演算法
網格搜尋: 網格搜尋可能是最簡單、應用最廣泛的超引數搜尋演算法,它通過查詢搜尋範圍內的所有的點來確定最優值。但是,這種搜尋方案十分消耗計算資源和時間,特別是需要調優的超引數比較多的時候。 在實際應用中,網格搜尋法一般會先使用較廣的搜尋範圍和較大的步長,來尋找全域性最優值可
MySQL 引數調優工具--tuning-primer
最近發現了一款有意思的工具,tuning-primer.sh,它其實是一個指令碼。下載地址:http://www.day32.com/MySQL/tuning-primer.sh 這個指令碼是通過 ”show statu like ...” 和 “show variab
JVM 記憶體溢位追蹤調優與 記憶體溢位、棧溢位原因
出處1:http://www.iteye.com寫java程式時大家一定對一下兩條異常並不陌生: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: PermGen space 尤其當
朝Code夕拾:JVM引數調優
堆設定 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:設定年輕代大小 -XX:NewRatio=n:設定年輕代和年老代的比值。如:為3,表示年輕代與年老代比值為1:3,年輕代佔整個年輕代年老代和的1/4 -XX:SurvivorRatio=n:年輕代
Java架構學習(十二)java記憶體結構&新生代&老年代&JVM引數調優&堆記憶體引數配置&解決堆疊溢位
JVM引數調優與垃圾回收機制 一、java記憶體結構 Java記憶體模型:是多執行緒裡面的,jmm與執行緒可見性有關 Java記憶體結構:是JVM虛擬機器儲存空間。 Java記憶體結構圖 Java記憶體機構分為:方法區、java堆、棧、本地
jvm系列(六):Java服務GC引數調優案例
本文介紹了一次生產環境的JVM GC相關引數的調優過程,通過引數的調整避免了GC卡頓對JAVA服務成功率的影響。 這段時間在整理jvm系列的文章,無意中發現本文,作者思路清晰通過步步分析最終解決問題。我個人特別喜歡這種實戰類的內容,經原作者的授權同意,將文章分
Spark2.0機器學習系列之1:基於Pipeline、交叉驗證、ParamMap的模型選擇和超引數調優
Spark中的CrossValidation Spark中採用是k折交叉驗證 (k-fold cross validation)。舉個例子,例如10折交叉驗證(10-fold cross validation),將資料集分成10份,輪流將其中9份
Linux核心 TCP/IP、Socket引數調優
Linux中檢視socket狀態: cat /proc/net/sockstat #(這個是ipv4的) sockets: used 137 TCP: inuse 49 orphan 0 tw 3272 alloc 52 mem 46 UDP: inuse 1 mem 0 RAW: inuse 0 FRAG:
JVM效能調優監控工具專題一:JVM自帶效能調優工具
前提概要: JDK本身提供了很多方便的JVM效能調優監控工具,除了整合式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一種工具都有其自身的特點,使用者可以根據你需要檢測的應用或者程式片段的狀況,適
Spark效能優化:JVM引數調優
關於JVM垃圾回收種類 Minor GC 從年輕代空間(包括 Eden 和 Survivor 區域)回收記憶體被稱為 Minor GC。這一定義既清晰又易於理解。但是,當發生Minor GC事件的
JVM引數調優例項解析
JVM引數調優是個很頭痛的問題,設定的不好,JVM不斷執行Full GC,導致整個系統變得很慢,網站停滯時間能達10秒以上,這種情況如果沒隔幾分鐘就來一次,自己都受不了。這種停滯在測試的時候看不出來,只有網站pv達到數十萬/天的時候問題就暴露出來了。 要想配置好JV
Redis監控工具,命令和調優
ret 數據 處理 util backlog rtu ado fec disable Redis監控工具,命令和調優 1.圖形化監控 由於要對Redis做性能測試,發現了GitHub上有個python寫的RedisLive監控工具評價不錯。結果鼓搗了
JVM回收器與調優
垃圾回收 ati 標記清除 adapt 收集器 沒有 影響 定義 top 定義: 使用編程語言將GC算法實現出來,產生的程序就是垃圾搜集器了 JVM給了三種選擇:串行收集器、並行收集器、並發收集器 串行搜集器(serial collector):它只有一條GC線