成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JVM調優好用的內存分析工具

開發 新聞
持續優化和對比優化前后的GC Log,能確認吞吐量和性能是否得到提升。

對于高并發訪問量的電商、物聯網、金融、社交等系統來說,JVM內存優化是非常有必要的,可以提高系統的吞吐量和性能。通常調優的首選方式是減少FGC次數或者FGC時間,以避免系統過多地暫停。FGC達到理想值后,比如一天或者兩天觸發一次FGC。FCT時間優化為100~300毫秒后,再減少YoungGC次數或者YoungGC時間,YoungGC仍然會消耗CPU資源,優化YoungGC調用次數和消耗的CPU資源,可以提高系統的吞吐量。

優化GC前,必須獲取GC的實際使用情況,最好的方式是通過CG Log收集垃圾回收日志,通過一些可視化工具查看垃圾回收分析數據,比如GCEasy。持續優化和對比優化前后的GC Log,能確認吞吐量和性能是否得到提升。

下面推薦幾個常用的內存分析命令和工具

jstat命令

JDK自帶的jstat命令用于查看虛擬機垃圾回收的情況,如下命令使用gcutil參數輸出堆內存使用情況統計:

jstat –gcutil  -h 20 pid 1000 100

此命令顯示進程為pid的內存使用匯總,1000毫秒輸出一次,總共輸出100行。-h 20表示每20行輸出一次表頭。-gcutil表示顯示JVM內存使用匯總統計:

圖片

列表顯示了虛擬機各個代的使用情況,描述了堆內存的使用占比和垃圾回收次數,以及占用時間,具體含義如下: 

  • S0,第一個幸存區使用比值。
  • S1,第二個幸存區的使用率。
  • E,伊甸園區的使用比值。
  • O,老年代。
  • M,方法區、元空間使用率。
  • CCS,壓縮使用比值。
  • YGC,年輕代垃圾回收次數。
  • YGCT,年輕帶垃圾回收占用時間。
  • FGC,全局垃圾回收次數,這對性能影響至關重要。
  • FGCT,全局垃圾回收的消耗時間。
  • GCT,總的垃圾回收時間。

可以看到S0、S1、E變化頻率高,說明程序在頻繁創建生命周期短的對象,FGC為0,表示還未做過全局垃圾回收。如果FGC變化頻率很高,則說明系統性能和吞吐量將下降,或者可能出現內存溢出。

其他查看匯總信息的常用選項如下:

  • -gc,類似gcutil,gcutil以百分比形式顯示內存的使用情況,gc顯示的是內存占用的字節數,以KB的形式輸出堆內存的使用情況。
  • -gccause,類似gcutil,額外輸出GC的原因。

jmap命令

jmap命令用于保存虛擬機內存鏡像到文件中,然后可以使用JVisualVM或者MAT工具進行進一步分析。命令如下:?

jmap -dump:format=b,file=filename.hprof pid

需要注意,實際系統會有2GB到8GB內存,此命令會導致虛擬機暫停工作1~3秒。還有一種是被動獲取方式,當虛擬機出現內存溢出的時候,會主動“dump”內存文件。添加虛擬機啟動參數:?

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof

當虛擬機判斷達到內存溢出觸發條件的時候,會有如下輸出并保存鏡像文件:?

java.lang.OutOfMemoryError: Java heap space
Dumping heap to heapdump.hprof ...

當獲得鏡像文件后,打開JvisualVM工具,選擇菜單“File”,點擊裝入,選擇我們保存過的dump文件,這時面板會打開內存鏡像文件。打開較大的內存鏡像文件需要較長的時間,需要耐心等候,其他工具,如MAT,或者商業的YourKit Java Profiler打開鏡像文件更快,分析功能更強大。

GCeasy

GCeasy是一個分析GC日志文件的在線網站,能根據上傳的GC日志,以圖表形式顯示GC回收過程和統計數據。下圖顯示的是GC性能的統計情況,如吞吐量顯示為99.935%,說明只有少量CPU資源用于垃圾回收。最長的GC時間是20毫秒,屬于正常范圍。在測試JVM參數調整是否能增加吞吐量,減小垃圾回收占用的CPU時,可以使用這個統計功能。

圖片

下圖統計了GC總的時間和回收的字節數,也顯示了Full GC的統計情況。

圖片

JMC

Java Mission Control簡稱JMC,是JDK自帶的工具,是一個高性能的對象監視、管理、產生時間分析和診斷的工具套件,筆者主要用來追蹤熱點代碼與熱點線程,是主要的內存優化調優工具。

類似JVisualVM,通過JMX連接進入JMC控制臺。

通過連接到遠程JVM進程后,可以執行飛行記錄(FlightRecord),選擇飛行記錄存放的路徑與執行時間即可,如下圖所示。需要注意的是,執行飛行記錄功能時會對當前JVM進程有一定的性能影響(大約為5%~10%),所以建議JMC連接隔離環境中的服務器并執行飛行記錄功能。

通過一段時間的記錄,飛行記錄可以反映線程的繁忙程度,以及CPU的熱點方法。

使用熱點方法可以直接找到最耗時的幾個方法,對熱點方法重點優化就可以使CPU的使用率下降一大截。

飛行記錄還可以反映內存增長的熱點方法,以及顯示單位時間內創建的最多對象的方法。下圖為找到的內存對象中創建的最多的char[]的方法,一個是Fastjson,另一個是Kryo。

小結:通過JMC的熱點方法的統計結果可以有針對性地進行優化,筆者通過對線上系統進行優化使得CPU使用率下降了40%、內存GC頻率下降了100%以上。

MAT

MAT是Memory Analyzer的簡稱,它是一款功能強大的Java堆內存分析器,可以分析具有數億個對象的內存鏡像,快速計算對象大小,自動找到嫌疑的泄漏對象并形成內存泄漏報告。MAT是基于Eclipse開發的,是一款免費的內存鏡像分析工具,是筆者發現內存泄漏原因的主要工具。

通過File-Open Heap Dump可以打開內存鏡像文件,顯示內容如下圖所示。

圖片

它提供了Leak Suspects 報告,輸出有可能發生內存泄漏的對象。

OQL

OQL語句類似SQL語句,可以在VisualVM、MAT等大多數內存鏡像分析工具中執行,完成對象查找任務。

對于程序員和架構師來說,Java系統的性能優化是一個超常規的挑戰。

這是因為Java語言和Java運行平臺,以及Java生態的復雜性決定了Java系統的性能優化不再是簡單的升級配置或者簡單的 "空間換時間”的技術實現,這涉及Java的各種知識點,如編寫高性能Java代碼,Java代碼的編譯優化,運行時刻的JIT優化,JVM的內存管理優化等,還包括如何使用高性能的第三方開源工具,以及微服務和分布式系統設計需要關注的性能事項。

責任編輯:張燕妮 來源: 華仔聊技術
相關推薦

2010-09-25 15:52:27

JVM內存JVM

2010-09-26 10:53:00

JVM內存調優設置

2017-10-17 14:02:30

jvm調優工具

2012-01-10 14:35:08

JavaJVM

2023-05-29 07:43:32

JVM內存調優

2017-07-21 08:55:13

TomcatJVM容器

2023-11-11 19:07:23

JVMJava

2019-11-01 08:49:07

JVM監控性能

2009-07-09 09:47:26

Sun JVM

2020-12-30 15:06:39

開發技能代碼

2020-08-10 17:49:25

JVM內存溢出

2010-09-27 09:23:42

JVM調優

2023-11-10 11:23:20

JVM內存

2021-03-17 11:35:11

JVM代碼Java

2010-09-26 13:39:46

JVM調優

2010-09-26 09:08:17

JVM調優

2012-01-10 15:13:56

JavaJVM

2010-09-17 14:17:05

JVM內存設置

2019-12-20 14:21:26

JVM調優垃圾回收

2021-06-03 08:32:18

JVM調優虛擬機
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲高清在线 | 国产一二三视频在线观看 | 一级黄色毛片 | 国产精品一区二区三区99 | 国产精品99久久久久久久久久久久 | 成人免费在线电影 | 毛片软件 | 中国一级大毛片 | 欧美日韩综合 | 狠狠插狠狠操 | 精品毛片视频 | 在线看av的网址 | 色综合久久久 | 国产色黄 | 91小视频在线| www.午夜| 黄色片网此| 天天成人综合网 | 91不卡 | 亚洲一区二区视频 | 亚洲精品视频播放 | 日韩精品一区二区三区中文在线 | 亚洲国产一区二区三区在线观看 | 一区中文字幕 | 国产欧美一区二区三区在线看 | 亚洲成人一区二区三区 | www.久久久久久久久久久久 | 中文字幕av在线一二三区 | 久在线精品视频 | 亚洲www啪成人一区二区 | 日本又色又爽又黄的大片 | 亚洲一区国产精品 | 夜久久| 在线观看中文字幕 | 极品国产视频 | 婷婷精品| 亚洲综合在线网 | 欧美激情一区二区三级高清视频 | 成人午夜免费福利视频 | av免费在线观看网站 | 欧美精品一区二区在线观看 |