91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

troubleshoot中怎么使用JFR分析性能

發布時間:2021-08-03 14:11:29 來源:億速云 閱讀:154 作者:Leah 欄目:大數據

troubleshoot中怎么使用JFR分析性能,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

GC性能事件

一般來說,GC會對java程序的性能操作產生比較重要的影響。我們可以使用jfr監控jdk.GCPhasePause事件。

下面是一個jdk.GCPhasePause的例子:

jfr print --events jdk.GCPhasePause flight_recording_1401comflydeanTestMemoryLeak89268.jfr

輸出結果:

jdk.GCPhasePause {
  startTime = 19:51:49.798
  duration = 41.1 ms
  gcId = 2
  name = "GC Pause"
}

通過GCPhasePause事件,我們可以統計總的GC pause時間和平均每一次GC pause的時間。

一般來說GC是在后臺執行的,所以GC本身的執行時間我們并不需要關注,因為這并不會影響到程序的性能。我們需要關注的是應用程序因為GC暫停的時間。

考慮下面兩種情況,第一種單獨的GC導致GC pause時間過長。第二種是總的GC pause時間過長。

如果是第一種情況,那么可能需要考慮換一個GC類型,因為不同的GC類型在pause時間和吞吐量的平衡直接會有不同的處理。同時我們需要減少finalizers的使用。

如果是第二種情況,我們可以從下面幾個方面來解決。

  • 增加heap空間大小。heap空間越大,GC的間隔時間就越長。總的GC pause時間就會越短。

  • 盡量減少tmp對象的分配。我們知道為了提升多線程的性能,JVM會使用TLAB技術。一般來說小對象會分配在TLAB中,但如果是大對象,則會直接分配在heap空間中。但是大部分對象都是在TLAB中分配的。所以我們可以同時關注TLAB和TLAB之外的兩個事件:jdk.ObjectAllocationInNewTLAB和dk.ObjectAllocationOutsideTLAB。

  • 減少分配頻率。我們可以通過jdk.ThreadAllocationStatistics來分析。

同步性能

在多線程環境中,因為多線程會競爭共享資源,所以對資源的同步,或者鎖的使用都會影響程序的性能。

我們可以監控jdk.JavaMonitorWait事件。

jfr print --events jdk.JavaMonitorWait flight_recording_1401comflydeanTestMemoryLeak89268.jfr

我們看一個結果:

jdk.JavaMonitorWait {
  startTime = 19:51:25.395
  duration = 2 m 0 s
  monitorClass = java.util.TaskQueue (classLoader = bootstrap)
  notifier = N/A
  timeout = 2 m 0 s
  timedOut = true
  address = 0x7FFBB7007F08
  eventThread = "JFR Recording Scheduler" (javaThreadId = 17)
  stackTrace = [
    java.lang.Object.wait(long)
    java.util.TimerThread.mainLoop() line: 553
    java.util.TimerThread.run() line: 506
  ]
}

通過分析JavaMonitorWait事件,我們可以找到競爭最激烈的鎖,從而進行更深層次的分析。

IO性能

如果應用程序有很多IO操作,那么IO操作也是會影響性能的關鍵一環。

我們可以監控兩種IO類型:socket IO和File IO。

相對應的事件有:dk.SocketWrite,jdk.SocketRead,jdk.FileWrite,jdk.FileRead。

代碼執行的性能

代碼是通過CPU來運行的,如果CPU使用過高,也可能會影響到程序的性能。

我們可以通過監聽jdk.CPULoad事件來對CPULoad進行分析。

jfr print --events jdk.CPULoad flight_recording_1401comflydeanTestMemoryLeak89268.jfr

看下運行結果:

jdk.CPULoad {
  startTime = 19:53:25.519
  jvmUser = 0.63%
  jvmSystem = 0.37%
  machineTotal = 20.54%
}

如果jvm使用的cpu比較少,但是整個machine的CPU使用率比較高,這說明了有其他的程序在占用CPU。

如果JVM自己的CPU使用就很高的話,那么就需要找到這個占用CPU的線程進行進一步分析。

其他有用的event

除了上面提到的event之外,還有一些其他有用的我們可以關注的event。

比如線程相關的:jdk.ThreadStart,jdk.ThreadEnd,jdk.ThreadSleep,jdk.ThreadPark。

如果你使用JMC,那么可以很直觀的查看JFR的各種事件。

troubleshoot中怎么使用JFR分析性能

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jfr
AI

砚山县| 平顶山市| 汉川市| 浦城县| 贞丰县| 扶沟县| 鹤峰县| 乌拉特后旗| 本溪市| 长顺县| 漠河县| 保康县| 松桃| 大田县| 临泽县| 阜平县| 邵阳市| 西乡县| 库车县| 芜湖县| 茶陵县| 兴文县| 共和县| 盐津县| 阿坝县| 乐陵市| 马鞍山市| 永川市| 铁岭县| 陈巴尔虎旗| 沁阳市| 城口县| 十堰市| 达拉特旗| 麻城市| 桐柏县| 徐汇区| 大关县| 南部县| 牡丹江市| 皋兰县|