日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java虚拟机监控_Java虚拟机监控工具

發布時間:2024/2/28 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java虚拟机监控_Java虚拟机监控工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jmap主要用于打印指定Java進程的共享對象內存映射或堆內存細節.

jmap 使用幫助

jmap自帶使用幫助 jmap -h 直接輸出各個參數選項的使用方式.主要包含-heap,-histo,-dump,其中的-histo和-dump都都可以跟著live子選項,使用live去執行的話會先進行一次full gc,然后再輸出gc后結果,所以在線上環境慎用.Usage:

jmap [option]

(to connect to running process)

jmap [option]

(to connect to a core file)

jmap [option] [server_id@]

(to connect to remote debug server)

where is one of:

to print same info as Solaris pmap

-heap to print java heap summary

-histo[:live] to print histogram of java object heap; if the "live"

suboption is specified, only count live objects

-permstat to print permanent generation statistics

-finalizerinfo to print information on objects awaiting finalization

-dump: to dump java heap in hprof binary format

dump-options:

live dump only live objects; if not specified,

all objects in the heap are dumped.

format=b binary format

file= dump heap to

Example: jmap -dump:live,format=b,file=heap.bin

-F force. Use with -dump: or -histo

to force a heap dump or histogram when does not

respond. The "live" suboption is not supported

in this mode.

-h | -help to print this help message

-J to pass directly to the runtime system

jmap -heap

輸出的內容包括兩部分

1. Heap Configuration : JVM啟動堆大小的配置,為啟動中配置的參數或者是根據系統內容默認出來的

2. Heap Usage : 堆各個分代或者內存區塊的總大小和使用情況

例如我有個25477進程,輸入 jmap -heap 25477 則輸入如下Attaching to process ID 25477, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 24.80-b11

using parallel threads in the new generation.

using thread-local object allocation.

Concurrent Mark-Sweep GC

Heap Configuration:

MinHeapFreeRatio = 40

MaxHeapFreeRatio = 70

MaxHeapSize = 1073741824 (1024.0MB)

NewSize = 536870912 (512.0MB)

MaxNewSize = 536870912 (512.0MB)

OldSize = 5439488 (5.1875MB)

NewRatio = 2

SurvivorRatio = 8

PermSize = 134217728 (128.0MB)

MaxPermSize = 134217728 (128.0MB)

G1HeapRegionSize = 0 (0.0MB)

Heap Usage:

New Generation (Eden + 1 Survivor Space):

capacity = 483196928 (460.8125MB)

used = 212745000 (202.88944244384766MB)

free = 270451928 (257.92305755615234MB)

44.02863256614082% used

Eden Space:

capacity = 429522944 (409.625MB)

used = 203633784 (194.20030975341797MB)

free = 225889160 (215.42469024658203MB)

47.409291364886904% used

From Space:

capacity = 53673984 (51.1875MB)

used = 9111216 (8.689132690429688MB)

free = 44562768 (42.49836730957031MB)

16.975106599130036% used

To Space:

capacity = 53673984 (51.1875MB)

used = 0 (0.0MB)

free = 53673984 (51.1875MB)

0.0% used

concurrent mark-sweep generation:

capacity = 536870912 (512.0MB)

used = 277557408 (264.6993713378906MB)

free = 259313504 (247.30062866210938MB)

51.69909596443176% used

Perm Generation:

capacity = 134217728 (128.0MB)

used = 48057608 (45.83130645751953MB)

free = 86160120 (82.16869354248047MB)

35.805708169937134% used

17927 interned Strings occupying 1892528 bytes.

雖然能夠看出堆內存的情況,但是它只是瞬時的狀態,沒辦法觀測到持續的情況,對比下之前的jstat -gcutil 在持續觀測gc上面是沒什么優勢的.

jmap -histo

使用來觀察類實例數和內存占用

jmap -histo 9931 | head -13 輸出如下num #instances #bytes class name

----------------------------------------------

1: 14814780 699191240 [C

2: 14335720 344057280 java.lang.String

3: 4398584 211132032 xxx.xxx.HistoryDownExp

4: 257644 184529576 [B

5: 604994 80461232 [I

6: 593514 28488672 sun.misc.FloatingDecimal

7: 30586 26224032 [Ljava.lang.Object;

8: 828080 19873920 com.google.gson.reflect.TypeToken

9: 69164 9988392

10: 69164 8864912

從上面的輸出可以看出HistoryDownExp 有4398584 個實例,總共占用了211132032 bytes (211.35M),每個對象占用48bytes

上面的數據可以用來估算某些對象的內存占用情況,結合QPS等其他因素推算出應用每秒在Eden區所申請的內存大小,進而估算出Eden區大小和GC頻率的關系,這在調整分代大小是很有幫助的.

還有如果你覺得內存消耗有點大或者懷疑內存泄露可以使用histo選項來查看當前實例的創建情況,特別是用來看一些業務頭部類的創建情況.可準確地看到去優化哪塊代碼的對象創建.

jmap -dump

-histo只能看到實例數和大小,偏于簡單,需要更詳細的信息我們可以把整個JVM的堆dump出來然后使用工具進行分析,如下面的命令,dump出來的是一個二進制的文檔jmap -dump:format=b,file=/tmp/java.9931.hprof 9931

一般情況是我比較喜歡使用MAT來看,VisualVM也可以,當然VisualVM的功能遠非如此,我們可以后續探討.

MAT 全稱 MemoryAnalyzer tools 下載地址 https://www.eclipse.org/mat/

打開工具后可以通過File-> Open Heap Dump 來加載dump文檔,如上面命令dump出來的 java.9931.hprof

開始是一個overview,很清楚地列出了占用內存最多的類,以及相關引用的實例.可以點擊餅圖區域調出菜單,選list objects 能看到該類的實例的引用情況.

功能還有很多,可以看看官方文檔.

HeapDumpOnOutOfMemoryError

上面介紹的方法都是人為在排查問題的時候主動輸入命令去分析的,但是如果是夜深人靜的時候發生了內存溢出,這時候我們沒有提前發現,現場沒有保留.

JVM有個選項 -XX:+HeapDumpOnOutOfMemoryError 加上后,發生 OutOfMemoryError 的時候會在運行目錄下dump出JVM內存的情況.然后就可以使用MAT進行分析了

總結

以上是生活随笔為你收集整理的java虚拟机监控_Java虚拟机监控工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。