1. 程式人生 > >JVM除錯追中引數設定

JVM除錯追中引數設定

引言: JVM提供了諸多的引數配置,打印出當前JVm的各類資訊,方便後續進行Java應用的排查,本文將詳細介紹若干常用的JVM除錯追蹤引數。

測試環境說明: JVM JDK8, Windows 7, STS 3.8.0,

特別說明:  每一代的JDK打印出來的資訊各有不同的差異,且GC本身也有差異,故需要注意這些區別不同。

1.  JVM除錯跟蹤之 列印簡單的GC資訊

  引數: -verbose:gc, -XX:+PrintGC

   日誌樣本:

[GC (Allocation Failure)  31744K->4734K(121856K), 0.0231062 secs]

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.3.6.RELEASE)

2016-08-02 09:43:14.965  INFO 3620 --- [  restartedMain] com.rain.wx.WxDemoApplication            : Starting WxDemoApplication on 08-201412015324 with PID 3620 (E:\MyTechnicalStack\mytechnicalstack\application\WXDemo\target\classes started by 201412015324 in E:\MyTechnicalStack\mytechnicalstack\application\WXDemo)
2016-08-02 09:43:14.968  INFO 3620 --- [  restartedMain] com.rain.wx.WxDemoApplication            : The following profiles are active: dev
[GC (Allocation Failure)  36478K->9437K(121856K), 0.0260942 secs]
[GC (Allocation Failure)  41181K->14749K(121856K), 0.0172923 secs]
2016-08-02 09:43:15.604  INFO 3620 --- [  restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot
[email protected]
51db255f: startup date [Tue Aug 02 09:43:15 CST 2016]; root of context hierarchy [GC (Allocation Failure) 46493K->17476K(153600K), 0.0315685 secs] [GC (Metadata GC Threshold) 53905K->19667K(153600K), 0.0198172 secs] [Full GC (Metadata GC Threshold) 19667K->10919K(125952K), 0.0690072 secs] [GC (Allocation Failure) 74407K->13064K(170496K), 0.0192360 secs]
這裡列出了GC的日誌樣本,擷取一個樣例進行分析:
[Full GC (Metadata GC Threshold)  19667K->10919K(125952K), 0.0690072 secs]
[GC (Allocation Failure)  74407K->13064K(170496K), 0.0192360 secs]
 Full GC 垃圾回收的一種方式, Metadata GC java類的元資料的閥值。  其對記憶體從19667k回收至10919k,釋放了9M,剩餘的堆記憶體佔用為12592k,時間消耗為:0.0690072secs

第二個為記憶體分配失敗,同時進行了記憶體回收操作。

2.   JVM除錯跟蹤之 列印詳細的GC資訊

  引數: -XX:+PrintGCDetails, +XX:+PrintGCTimeStamps

   應用場景: 檢視更為詳細的GC資訊

   日誌樣例:

10.595: [GC (Metadata GC Threshold) [PSYoungGen: 99723K->16630K(238592K)] 116636K->33542K(302592K), 0.0539425 secs] [Times: user=0.16 sys=0.01, real=0.05 secs] 
10.649: [Full GC (Metadata GC Threshold) [PSYoungGen: 16630K->0K(238592K)] [ParOldGen: 16912K->25195K(87552K)] 33542K->25195K(326144K), [Metaspace: 34777K->34777K(1081344K)], 0.1994152 secs] [Times: user=0.47 sys=0.05, real=0.20 secs] 
2016-08-02 09:49:10.497  INFO 9004 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2016-08-02 09:49:10.612  INFO 9004 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
 樣例分析:  
10.649: [Full GC (Metadata GC Threshold) [PSYoungGen: 16630K->0K(238592K)] [ParOldGen: 16912K->25195K(87552K)] 33542K->25195K(326144K), [Metaspace: 34777K->34777K(1081344K)], 0.1994152 secs] [Times: user=0.47 sys=0.05, real=0.20 secs] 
  Full GC: 垃圾回收的方法,起因為MetaGC Threadhold觸發了。

  PSYoungGen:  年輕代的垃圾回收,

 ParOldGen:  年老代的垃圾回收

 Metaspace: 34777K->34777K(1081344K,   元資料空間沒有發生記憶體的變化,即未收集到GC垃圾,記憶體使用狀況不變。

  後面的是各個階段的時間消耗。

3. -Xlogger:logpath  設定gc的日誌路徑

   引數設定: -Xlogger:log/gc.log, 將gc.log的路徑設定到當前目錄的log目錄下.

   應用場景: 將gc的日誌獨立寫入日誌檔案,將GC日誌與系統業務日誌進行了分離,方便開發人員進行追蹤分析。

4. JVM除錯追蹤之 -XX:+PrintHeapAtGC, 列印推資訊

    引數設定: -XX:+PrintHeapAtGC

     應用場景: 獲取Heap在每次垃圾回收前後的使用狀況

     日誌樣例:

{Heap before GC invocations=2 (full 0):
 PSYoungGen      total 36864K, used 36465K [0x00000000d6e00000, 0x00000000db600000, 0x0000000100000000)
  eden space 31744K, 100% used [0x00000000d6e00000,0x00000000d8d00000,0x00000000d8d00000)
  from space 5120K, 92% used [0x00000000d8d00000,0x00000000d919c4b0,0x00000000d9200000)
  to   space 5120K, 0% used [0x00000000db100000,0x00000000db100000,0x00000000db600000)
 ParOldGen       total 84992K, used 8K [0x0000000084a00000, 0x0000000089d00000, 0x00000000d6e00000)
  object space 84992K, 0% used [0x0000000084a00000,0x0000000084a02000,0x0000000089d00000)
 Metaspace       used 13833K, capacity 13978K, committed 14208K, reserved 1060864K
  class space    used 1762K, capacity 1820K, committed 1920K, reserved 1048576K
3.946: [GC (Allocation Failure) [PSYoungGen: 36465K->5105K(68608K)] 36473K->9419K(153600K), 0.0104688 secs] [Times: user=0.00 sys=0.01, real=0.01 secs] 
Heap after GC invocations=2 (full 0):
 PSYoungGen      total 68608K, used 5105K [0x00000000d6e00000, 0x00000000db600000, 0x0000000100000000)
  eden space 63488K, 0% used [0x00000000d6e00000,0x00000000d6e00000,0x00000000dac00000)
  from space 5120K, 99% used [0x00000000db100000,0x00000000db5fc510,0x00000000db600000)
  to   space 5120K, 0% used [0x00000000dac00000,0x00000000dac00000,0x00000000db100000)
 ParOldGen       total 84992K, used 4314K [0x0000000084a00000, 0x0000000089d00000, 0x00000000d6e00000)
  object space 84992K, 5% used [0x0000000084a00000,0x0000000084e36a20,0x0000000089d00000)
 Metaspace       used 13833K, capacity 13978K, committed 14208K, reserved 1060864K
  class space    used 1762K, capacity 1820K, committed 1920K, reserved 1048576K
}
日誌分析:

  年輕代                         總共記憶體使用        已經使用             起始地址                                當前地址                                 地址上限

PSYoungGen      total 36864K, used 36465K [0x00000000d6e00000, 0x00000000db600000, 0x0000000100000000)
    伊甸區      佔用100%               伊甸區域的起始地址       當前地址         最大地址上限
   eden space 31744K, 100% used [0x00000000d6e00000,0x00000000d8d00000,0x00000000d8d00000)
    S0區域     記憶體佔用 百分比         地址資訊
   from space 5120K, 92% used [0x00000000d8d00000,0x00000000d919c4b0,0x00000000d9200000)   
    S1區域     記憶體佔用  百分比      地址資訊
   to   space 5120K, 0% used [0x00000000db100000,0x00000000db100000,0x00000000db600000)
年老代的分析:

  年老代                         總共佔用                     目前使用                地址空間

 ParOldGen       total 84992K, used 8K [0x0000000084a00000, 0x0000000089d00000, 0x00000000d6e00000)
    實際物件佔用的記憶體情況
   object space 84992K, 0% used [0x0000000084a00000,0x0000000084a02000,0x0000000089d00000)
元資料區,存放class、方法/Main等靜態資訊

   元資料區域               已經使用                  容量                                  提交                             預留

Metaspace       used 13833K, capacity 13978K, committed 14208K, reserved 1060864K
    類靜態資訊       已經使用    容量             已經提交                預留
   class space    used 1762K, capacity 1820K, committed 1920K, reserved 1048576K
5. JVM監控除錯之類載入資訊 -XX:+TraceClassLoading

    引數方法:  -XX:+TraceClassLoading

     應用場景:  在系統控制檯資訊中看到class載入的過程和具體的class資訊,可用以分析類的載入順序以及是否可進行精簡操作。

    日誌樣例:

[2m2016-08-02 10:21:51.282[0;39m [32m INFO[0;39m [35m12448[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mo.s.c.support.DefaultLifecycleProcessor [0;39m [2m:[0;39m Starting beans in phase 0
[Loaded org.springframework.jmx.export.naming.SelfNaming from file:/D:/M2Repository/repositories/org/springframework/spring-context/4.2.7.RELEASE/spring-context-4.2.7.RELEASE.jar]
[Loaded org.springframework.jmx.support.ObjectNameManager from file:/D:/M2Repository/repositories/org/springframework/spring-context/4.2.7.RELEASE/spring-context-4.2.7.RELEASE.jar]
[Loaded javax.management.modelmbean.ModelMBeanInfoSupport from C:\Program Files\Java\jre1.8.0_51\lib\rt.jar]
[Loaded javax.management.DescriptorAccess from C:\Program Files\Java\jre1.8.0_51\lib\rt.jar]
[Loaded javax.management.modelmbean.ModelMBeanAttributeInfo from C:\Program Files\Java\jre1.8.0_51\lib\rt.jar]
[Loaded javax.management.modelmbean.ModelMBeanConstructorInfo from C:\Program Files\Java\jre1.8.0_51\lib\rt.jar]
[Loaded javax.management.modelmbean.ModelMBeanNotificationInfo from C:\Program Files\Java\jre1.8.0_51\lib\rt.jar]
[Loaded javax.management.modelmbean.ModelMBeanOperationInfo from C:\Program Files\Java\jre1.8.0_51\lib\rt.jar]
[Loaded javax.management.modelmbean.DescriptorSupport from C:\Program Files\Java\jre1.8.0_51\lib\rt.jar]
[Loaded sun.reflect.GeneratedConstructorAccessor32 from __JVM_DefineClass__]
[Loaded com.sun.proxy.$Proxy76 from sun.misc.Launcher$AppClassLoader]
[Loaded com.sun.proxy.$Proxy77 from sun.misc.Launcher$AppClassLoader]
[Loaded org.springframework.jmx.export.metadata.AbstractJmxAttribute from file:/D:/M2Repository/repositories/org/springframework/spring-context/4.2.7.RELEASE/spring-context-4.2.7.RELEASE.jar]
[Loaded org.springframework.jmx.export.metadata.ManagedResource from file:/D:/M2Repository/repositories/org/springframework/spring-context/4.2.7.RELEASE/spring-context-4.2.7.RELEASE.jar]
[Loaded org.springframework.beans.annotation.AnnotationBeanUtils from file:/D:/M2Repository/repositories/org/springframework/spring-beans/4.2.7.RELEASE/spring-beans-4.2.7.RELEASE.jar]
[Loaded org.springframework.jmx.export.annotation.ManagedAttribute from file:/D:/M2Repository/repositories/org/springframework/spring-context/4.2.7.RELEASE/spring-context-4.2.7.RELEASE.jar]
[Loaded com.sun.proxy.$Proxy78 from sun.misc.Launcher$AppClassLoader]
6.  JVM追蹤測試之-XX:+PrintHistogram 列印類的記憶體佔用

     引數方法:-XX:+PrintHistogram

     應用場景: 分析各類記憶體物件的佔用情況

     使用方法:  ctrl+break window系統下, 令人懊惱的是,我竟然沒有在我的筆記本上找到break鍵,好吧,就這樣吧,瞭解一下算了。

7. 總結

     以上只是簡單介紹了一些除錯列印的引數,其實JVM還有很多的類似引數,這個需要大家自行上網查找了。

相關推薦

JVM除錯引數設定

引言: JVM提供了諸多的引數配置,打印出當前JVm的各類資訊,方便後續進行Java應用的排查,本文將詳細介紹若干常用的JVM除錯追蹤引數。 測試環境說明: JVM JDK8, Windows 7, STS 3.8.0, 特別說明:  每一代的JDK打印出來的資訊各有不同的

JVM調優常用引數設定及JMX引數設定監控

JVM常用引數設定 JVM堆空間佈局  堆設定            -Xms:初始堆大小,避免垃圾回收之後,JVM調整,一般和Xmx設定一樣大            -Xmx:最大堆大小            -Xmn :  年輕代大小,整個堆大小=年輕代大小

JVM調優及引數設定

(1)引數 -Xms:初始堆大小 -Xmx :最大堆大小 此值可以設定與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配記憶體 -Xmn :年輕代大小 整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代後,將會減小年老代大

JVM堆空間劃分、引數設定

上圖中,刻畫了Java程式執行時的堆空間,可以簡述成如下2條 1.JVM中堆空間可以分成三個大區,新生代、老年代、永久代 2.新生代可以劃分為三個區,Eden區,兩個倖存區 在JVM執行時,可以通過配置以下引數改變整個JVM堆的配置比例 1.JVM執行時堆的大小  

SpringBoot 啟動引數設定環境變數、JVM引數、tomcat遠端除錯

java命令的模版:java [-options] -jar jarfile [args...] 先貼一下我的簡單的啟動命令: java -Xms128m -Xmx256m -Xdebug -Xrunjdwp:server=y,transport=dt_socket,

Spark各個角色的JVM引數設定

1)Driver的JVM引數: -Xmx,-Xms,如果是yarn-client模式,則預設讀取spark-env檔案中的SPARK_DRIVER_MEMORY值,-Xmx,-Xms值一樣大小;如果是yarn-cluster模式,則讀取的是spark-default.co

學習筆記1:深入理解Java虛擬機器——JVM高階特性與最佳實踐_OOM(記憶體溢位)_虛擬機器引數設定_MAT

eclipse中設定debug標籤頁的vm引數 1,Run->Debug configurations->Java Application 2,選中已經寫好的專案 3,Arguments->VM arguments 4,在VM arguments 裡面就可以對虛擬機器的

JAVA——JVM引數設定規則以及引數含義

JVM引數設定規則: -XX:+<option> 啟用option,例如:-XX:+PrintGCDetails啟動列印GC資訊的選項,其中+號表示true,開啟的意思-XX:-<option> 不啟用option,例如:-XX:-PrintGCDetails關閉啟動列印GC資訊的選

JAVA jvm引數設定

1.設定列印gc日誌 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:filename 2.設定垃圾收集器 -XX:+UseSerialGC:設定序列收集器 -XX:+UseParallelGC:

解決 Flask 專案無法用 .env 檔案解析的引數設定環境變數的錯誤

在 Windows 上啟動 Flask 專案時,工作目錄有 UTF-8 編碼的 .env 檔案,裡面配置的環境變數在 Python2 中識別為 Unicode 型別,導致下述錯誤: * Serving Flask app "bootstrap" (lazy loading) * Environme

JVM引數,啟動jar 包以及 啟動tomcat的 JVM引數設定

一,基本的啟動引數的位置 public class TestJVM { public static void main(String[] args) { long maxM = Runtime.getRuntime().maxMemory(); long totalM =

springmvc+jsp關於JQuery ajax提交的Content-Type引數設定application/json和application/x-www-form-urlencoded區別

介紹 本人頁面是用的JSP,後臺用的Spring MVC。 使用JQ的ajax需要設定Content-Type,Content-Type的設定有以下幾種常用的 "Content-Type": "application/x-www-form-urlencoded" // 適用於

使用System.getProperty方法,如何配置JVM系統屬性,weblogic設定JVM的幾個引數說明

很多時候我們需要在專案中讀取外部屬性檔案,用到了System.getProperty("")方法。這個方法需要配置JVM系統屬性,那麼如何配置呢? 那就是使用java -D 配置系統屬性。 使用格式是:java -Dkey=value 第一種方法是在myeclipse

Latexnumerate的一些引數設定

\usecounter{numcount} % 使用計數器,初始值為0 \setlength{\leftmargin}{1.2em} %左邊界 \setlength{\parsep}{0ex} %段落間距 \setlength{\topsep}{1ex} %列表

JVM調優手冊之六:JVM引數設定及分析

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

JVM引數設定、分析

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

JVM 常用引數設定

堆設定 : 1.-Xms:初始堆大小 2.-Xmx:最大堆大小 3.-Xss:執行緒棧大小 4.-XX:NewSize=n:設定年輕代大小 5.-XX:NewRatio=n:設定年輕代和年老代的比值。如:3,表示年輕代:老年代比值為1:3,年輕代佔整總和的1/

Unity3D-程式碼動態設定Material引數

我們知道在Unity中可以在程式碼中動態地改變Material監視面板中的引數,如改變數值大小或替換貼圖。常用的API有:SetColor , SetFloat, SetInt, SetTexture.然而今天在設定一個StandardShader的材質貼圖的時候,發現設定了

Unity-程式碼動態設定Material引數

我們知道在Unity中可以在程式碼中動態地改變Material監視面板中的引數,如改變數值大小或替換貼圖。常用的API有:SetColor , SetFloat, SetInt, SetTexture. 然而今天在設定一個StandardShader的材質貼圖

jvm 啟動引數設定

jvm記憶體區域劃分 Eden Space、Survivor Space、Tenured Gen jvm區域總體分兩類,heap區和非heap區。heap區又分:Eden Space(伊甸園)、Survivor Space(倖存者區)、Tenured Gen