1. 程式人生 > >jvm工具、引數調優&除錯技巧-實用!

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/IPSocket引數調

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線