【轉】gc日誌分析工具

来源:http://www.cnblogs.com/alikaimen/archive/2016/05/05/5462425.html
-Advertisement-
Play Games

性能測試排查定位問題,分析調優過程中,會遇到要分析gc日誌,人肉分析gc日誌有時比較困難,相關圖形化或命令行工具可以有效地幫助輔助分析。 Gc日誌參數 通過在tomcat啟動腳本中添加相關參數生成gc日誌 -verbose.gc開關可顯示GC的操作內容。打開它,可以顯示最忙和最空閑收集行為發生的時間 ...


性能測試排查定位問題,分析調優過程中,會遇到要分析gc日誌,人肉分析gc日誌有時比較困難,相關圖形化或命令行工具可以有效地幫助輔助分析。

Gc日誌參數

通過在tomcat啟動腳本中添加相關參數生成gc日誌

-verbose.gc開關可顯示GC的操作內容。打開它,可以顯示最忙和最空閑收集行為發生的時間、收集前後的記憶體大小、收集需要的時間等。

打開-xx:+ printGCdetails開關,可以詳細瞭解GC中的變化。

打開-XX: + PrintGCTimeStamps開關,可以瞭解這些垃圾收集發生的時間,自JVM啟動以後以秒計量。

最後,通過-xx: + PrintHeapAtGC開關瞭解堆的更詳細的信息。

為了瞭解新域的情況,可以通過-XX:=PrintTenuringDistribution開關瞭解獲得使用期的對象權。

-Xloggc:$CATALINA_BASE/logs/gc.log gc日誌產生的路徑

XX:+PrintGCApplicationStoppedTime // 輸出GC造成應用暫停的時間

-XX:+PrintGCDateStamps // GC發生的時間信息

 

Gc日誌

日誌中顯示了gc發生的時間,young區回收情況,整體回收情況,fullGC情況,回收所消耗時間等

 

常用JVM參數

分析gc日誌後,經常需要調整jvm記憶體相關參數,常用參數如下

-Xms:初始堆大小,預設為物理記憶體的1/64(<1GB);預設(MinHeapFreeRatio參數可以調整)空餘堆記憶體小於40%時,JVM就會增大堆直到-Xmx的最大限制

-Xmx:最大堆大小,預設(MaxHeapFreeRatio參數可以調整)空餘堆記憶體大於70%時,JVM會減少堆直到 -Xms的最小限制

-Xmn:新生代的記憶體空間大小,註意:此處的大小是(eden+ 2 survivor space)。與jmap -heap中顯示的New gen是不同的。整個堆大小=新生代大小 + 老生代大小 + 永久代大小。 
在保證堆大小不變的情況下,增大新生代後,將會減小老生代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。

-XX:SurvivorRatio:新生代中Eden區域與Survivor區域的容量比值,預設值為8。兩個Survivor區與一個Eden區的比值為2:8,一個Survivor區占整個年輕代的1/10。

-Xss:每個線程的堆棧大小。JDK5.0以後每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。應根據應用的線程所需記憶體大小進行適當調整。在相同物理記憶體下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。一般小的應用, 如果棧不是很深, 應該是128k夠用的,大的應用建議使用256k。這個選項對性能影響比較大,需要嚴格的測試。和threadstacksize選項解釋很類似,官方文檔似乎沒有解釋,在論壇中有這樣一句話:"-Xss is translated in a VM flag named ThreadStackSize”一般設置這個值就可以了。

-XX:PermSize:設置永久代(perm gen)初始值。預設值為物理記憶體的1/64。

-XX:MaxPermSize:設置持久代最大值。物理記憶體的1/4。

 

Gc日誌分析工具

(1)GCHisto

http://Java.net/projects/gchisto

 

直接點擊gchisto.jar就可以運行,點add載入gc.log

統計了總共gc次數,youngGC次數,FullGC次數,次數的百分比,GC消耗的時間,百分比,平均消耗時間,消耗時間最小最大值等

 

 

 

統計的圖形化表示

 

 

YoungGC,FullGC不同消耗時間上次數的分佈圖,勾選可以顯示youngGC或fullGC單獨的分佈情況

 

 

整個時間過程詳細的gc情況,可以對整個過程進行剖析

 

 

 

(2)GCLogViewer

 

http://code.google.com/p/gclogviewer/

 

點擊run.bat運行

 

整個過程gc情況的趨勢圖,還顯示了gc類型,吞吐量,平均gc頻率,記憶體變化趨勢等

Tools里還能比較不同gc日誌

 

 

 

 

(3)HPjmeter

 

獲取地址 http://www.hp.com/go/java
參考文檔 http://www.javaperformancetuning.com/tools/hpjtune/index.shtml

 

工具很強大,但只能打開由以下參數生成的GC log, -verbose:gc -Xloggc:gc.log,添加其他參數生成的gc.log無法打開。

 

(4)GCViewer

http://www.tagtraum.com/gcviewer.html

這個工具用的挺多的,但只能在JDK1.5以下的版本中運行,1.6以後沒有對應。

(5)garbagecat

http://code.google.com/a/eclipselabs.org/p/garbagecat/wiki/Documentation

 

 

其它監控方法

Jvisualvm動態分析jvm記憶體情況和gc情況,插件:visualGC

 

  

jvisualvm還可以heapdump出對應hprof文件(預設存放路徑:監控的伺服器 /tmp下),利用相關工具,比如HPjmeter可以對其進行分析

grep Full gc.log粗略觀察FullGC發生頻率

jstat –gcutil [pid] [intervel] [count]

jmap -histo pid可以觀測對象的個數和占用空間
jmap -heap pid可以觀測jvm配置參數,堆記憶體各區使用情況

jprofiler,jmap dump出來用MAT分析

 

如果要分析的dump文件很大的話,就需要很多記憶體,很容易crash。

所以在啟動時,我們應該加上一些參數: Java –Xms512M –Xmx1024M –Xss8M 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、遞歸函數 概念:遞歸演算法是一種直接或者間接的調用自身演算法的過程。在電腦編寫程式中,遞歸演算法對解決一大類問題是十分有效的。 特點: ①遞歸就是在過程或者函數里調用自身。 ②在使用遞歸策略時,必須有一個明確的遞歸條件,稱為遞歸出口。 ③遞歸演算法解題通常顯得很簡潔,但遞歸演算法解題的效率較低。所以一般 ...
  • 問題? Java7新增了關於文件屬性信息的一些新特性,通過java.nio.file.*包下麵的類可以實現設置或者讀取文件的元數據信息(比如最後修改時間,創建時間,文件大小,是否為目錄等等)。尤其是UserDefinedFileAttributeView,可以用來自定義文件的元數據信息。於是在自己的 ...
  • 1. 初識解釋器ghci 1.1 查看幫助: :? 1.2 修改提示符: :set prompt ghci>>> 1.3 加自己指定模塊: :module + Data.Ratio 2. 基本交互 2.1 基本算術運算 中綴表達式: 首碼表達式: 2.2 算術中的負數 -8其實並不是直接表示負數8, ...
  • 實現界面 涉及到四張表,type(商品類型表),type_spec(商品類型規格關聯表),attribute(商品屬性表),attribute_value(商品屬性值表) 新建基控制器BaseController.class.php,向上抽取出來的公用方法 BaseController.class. ...
  • [源碼下載] 速戰速決 (4) - PHP: 類基礎, 抽象類, 介面, trait 作者:webabcd介紹速戰速決 之 PHP 類基礎 抽象類 介面 trait 示例1、類的相關知識點 1(基礎)class/class1.php 2、類的相關知識點 2(抽象類,介面,trait)class/cl ...
  • 另:如何在eclipse中改類名,--右鍵類,Refactor >> Rename 即可 ...
  • Java線程通訊方法之wait()、nofity() 詳解 本文將探討以下問題: 1. synchronized 代碼塊使用 2. notify()與notifyAll()的區別 3. Java wait(),notify()如何使用 參考文章: "Java並行(2): Monitor" "Java ...
  • 本來打算按計劃做下去的,發現原來那個sprite雖然功能強大,但是對我想要做的東西來說,冗餘似乎有些多,決定自己寫一個。 之前做了一段時間的h5游戲,用的是panda.js,發現這個引擎封裝的還不錯,代碼很簡潔,決定借鑒著來寫自己的delphi game sprite。 這周成果: 1、設計了一個g ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...