1. 程式人生 > >Java 記憶體洩露監控工具-- JVM監控工具介紹jstack, jconsole, jinfo, jmap, jdb, jstat

Java 記憶體洩露監控工具-- JVM監控工具介紹jstack, jconsole, jinfo, jmap, jdb, jstat

u              jstack的用法

如果java程式崩潰生成core檔案,jstack工具可以用來獲得core檔案的java stack和native stack的資訊,從而可以輕鬆地知道java程式是如何崩潰和在程式何處發生問題。另外,jstack工具還可以附屬到正在執行的java程式中,看到當時執行的java程式的java stack和native stack的資訊, 如果現在執行的java程式呈現hung的狀態,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。

[[email protected] bin]# jstack 25444

Attaching to process ID 25917, please wait...

Debugger attached successfully.

Client compiler detected.

JVM version is 1.5.0_08-b03

Thread 25964: (state = BLOCKED)

Error occurred during stack walking:

sun.jvm.hotspot.debugger.DebuggerException: sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs failed for a lwp

        at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal$LinuxDebuggerLocalWorkerThread.execute(LinuxDebuggerLocal.java:134)

        at sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.getThreadIntegerRegisterSet(LinuxDebuggerLocal.java:437)

        at sun.jvm.hotspot.debugger.linux.LinuxThread.getContext(LinuxThread.java:48)

        at


u              jstat的用法

用以判斷JVM是否存在記憶體問題呢?如何判斷JVM垃圾回收是否正常?一般的top指令基本上滿足不了這樣的需求,因為它主要監控的是總體的系統資源,很難定位到java應用程式。

Jstat是JDK自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程式的資源和效能進行實時的命令列的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常適用。由於JVM記憶體設定較大,圖中百分比變化不太明顯

一個極強的監視VM記憶體工具。可以用來監視VM記憶體內的各種堆和非堆的大小及其記憶體使用量。

jstat工具特別強大,有眾多的可選項,詳細檢視堆內各個部分的使用量,以及載入類的數量。使用時,需加上檢視程序的程序id,和所選引數。

語法結構:

Usage: jstat -help|-options

       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

引數解釋:

Options — 選項,我們一般使用 -gcutil 檢視gc情況

vmid    — VM的程序號,即當前執行的java程序號

interval– 間隔時間,單位為秒或者毫秒

count   — 列印次數,如果預設則列印無數次

S0  — Heap上的 Survivor space 0 區已使用空間的百分比
S1  — Heap上的 Survivor space 1 區已使用空間的百分比
E   — Heap上的 Eden space 區已使用空間的百分比
O   — Heap上的 Old space 區已使用空間的百分比
P   — Perm space 區已使用空間的百分比
YGC — 從應用程式啟動到取樣時發生 Young GC 的次數
YGCT– 從應用程式啟動到取樣時 Young GC 所用的時間(單位秒)
FGC — 從應用程式啟動到取樣時發生 Full GC 的次數
FGCT– 從應用程式啟動到取樣時 Full GC 所用的時間(單位秒)
GCT — 從應用程式啟動到取樣時用於垃圾回收的總時間(單位秒)

例項使用1:

[[email protected] bin]# jstat -gcutil 25444

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT

 11.63   0.00   56.46  66.92  98.49 162    0.248    6      0.331    0.579

例項使用2:

[[email protected] bin]# jstat -gcutil 25444 1000 5

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT

 73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583

 73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583

 73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583

 73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583

 73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583

我們可以看到,5次young gc之後,垃圾記憶體被從Eden space區(E)放入了Old space區(O),並引起了百分比的變化,導致Survivor space使用的百分比從73.54%(S0)降到0%(S1)。有效釋放了記憶體空間。綠框中,我們可以看到,一次full gc之後,Old space區(O)的記憶體被回收,從99.05%降到67.52%。

圖中同時列印了young gc和full gc的總次數、總耗時。而,每次young gc消耗的時間,可以用相間隔的兩行YGCT相減得到。每次full gc消耗的時間,可以用相隔的兩行FGCT相減得到。例如紅框中表示的第一行、第二行之間發生了1次young gc,消耗的時間為0.252-0.252=0.0秒。

常駐記憶體區(P)的使用率,始終停留在98.49%左右,說明常駐記憶體沒有突變,比較正常。

如果young gc和full gc能夠正常發生,而且都能有效回收記憶體,常駐記憶體區變化不明顯,則說明java記憶體釋放情況正常,垃圾回收及時,java記憶體洩露的機率就會大大降低。但也不能說明一定沒有記憶體洩露。

GCT 是YGCT 和FGCT的時間總和。

以上,介紹了Jstat按百分比檢視gc情況的功能。其實,它還有功能,例如載入類資訊統計功能、記憶體池資訊統計功能等,那些是以絕對值的形式打印出來的,比較少用,在此就不做介紹。

[[email protected] bin]# ps -ef | grep java

root     25917     1  2 23:23 pts/2    00:00:05 /usr/local/jdk1.5/bin/java -Djava.endorsed.dirs=/usr/local/jakarta-tomcat-5.0.30/common/endorsed -classpath /usr/local/jdk1.5/lib/tools.jar:/usr/local/jakarta-tomcat-5.0.30/bin/bootstrap.jar:/usr/local/jakarta-tomcat-5.0.30/bin/commons-logging-api.jar -Dcatalina.base=/usr/local/jakarta-tomcat-5.0.30 -Dcatalina.home=/usr/local/jakarta-tomcat-5.0.30 -Djava.io.tmpdir=/usr/local/jakarta-tomcat-5.0.30/temp org.apache.catalina.startup.Bootstrap start

jstat -class pid:顯示載入class的數量,及所佔空間等資訊。

例項使用3:

[[email protected] bin]# jstat -class 25917

Loaded  Bytes  Unloaded  Bytes     Time

2629    2916.8       29   24.6     0.90

jstat -compiler pid:顯示VM實時編譯的數量等資訊。

例項使用4:

[[email protected] bin]# jstat -compiler 25917

Compiled Failed Invalid   Time   FailedType FailedMethod

     768      0       0   0.70            0

jstat –gccapacity :可以顯示,VM記憶體中三代(young,old,perm)物件的使用和佔用大小,如:PGCMN顯示的是最小perm的記憶體使用量,PGCMX顯示的是perm的記憶體最大使用量,PGC是當前新生成的perm記憶體佔用量,PC是但前perm記憶體佔用量。其他的可以根據這個類推, OC是old內純的佔用量。

[[email protected] bin]# jstat -gccapacity 25917

NGCMN       640.0

NGCMX       4992.0

NGC         832.0

S0C         64.0

S1C         64.0

EC          704.0

OGCMN       1408.0

OGCMX       60544.0

OGC         9504.0

OC          9504.0                  OC是old內純的佔用量

PGCMN       8192.0                  PGCMN顯示的是最小perm的記憶體使用量

PGCMX       65536.0                 PGCMX顯示的是perm的記憶體最大使用量

PGC         12800.0                 PGC是當前新生成的perm記憶體佔用量

PC          12800.0                 PC是但前perm記憶體佔用量

YGC         164

FGC         6

jstat -gcnew pid: new物件的資訊

[[email protected] bin]# jstat -gcnew 25917

 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT

 64.0   64.0   47.4   0.0   2  15   32.0    704.0    145.7    168    0.254

jstat -gcnewcapacity pid: new物件的資訊及其佔用量

[[email protected] bin]# jstat -gcnewcapacity 25917

 NGCMN  NGCMX   NGC   S0CMX  S0C   S1CMX  S1C   ECMX    EC      YGC   FGC

640.0  4992.0  832.0 64.0   448.0 448.0  64.0   4096.0  704.0  168     6

jstat -gcold pid: old物件的資訊。

[[email protected] bin]# jstat -gcold 25917

   PC       PU        OC          OU       YGC    FGC    FGCT     GCT

 12800.0  12617.6     9504.0      6561.3   169     6    0.335    0.591

jstat -gcoldcapacity pid:old物件的資訊及其佔用量。

[[email protected] bin]# jstat -gcoldcapacity 25917

OGCMN      OGCMX        OGC         OC       YGC   FGC    FGCT     GCT

1408.0     60544.0      9504.0      9504.0   169     6    0.335    0.591

jstat -gcpermcapacity pid: perm物件的資訊及其佔用量。

[[email protected] bin]# jstat -gcpermcapacity 25917

PGCMN      PGCMX       PGC         PC      YGC   FGC    FGCT     GCT

8192.0    65536.0    12800.0    12800.0   169     6    0.335    0.591

jstat -printcompilation pid:當前VM執行的資訊。

[[email protected] bin]# jstat -printcompilation -h3  25917 1000 5

每1000毫秒列印一次,一共列印5次,還可以加上-h3每三行顯示一下標題。

Compiled  Size  Type Method

     788     73    1 java/io/File <init>

     788     73    1 java/io/File <init>

     788     73    1 java/io/File <init>

Compiled  Size  Type Method

     788     73    1 java/io/File <init>

     788     73    1 java/io/File <init>

u              jmap的用法

打印出某個java程序(使用pid)記憶體內的,所有‘物件’的情況(如:產生那些物件,及其數量)。

可以輸出所有記憶體中物件的工具,甚至可以將VM 中的heap,以二進位制輸出成文字。使用方法 jmap -histo pid。如果連用SHELL jmap -histo pid>a.log可以將其儲存到文字中去,在一段時間後,使用文字對比工具,可以對比出GC回收了哪些物件。jmap -dump:format=b,file=String 3024可以將3024程序的記憶體heap輸出出來到String檔案裡。

[[email protected] bin]# jmap -histo  25917

Attaching to process ID 26221, please wait...

Debugger attached successfully.

Client compiler detected.

JVM version is 1.5.0_08-b03

Iterating over heap. This may take a while...

Unknown oop at 0xaa6e42d0

Oop's klass is null

Object Histogram:

Size    Count   Class description

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

3722768 30467   * ConstMethodKlass

1976480 25334   char[]

1907880 46994   * SymbolKlass

1762088 2947    byte[]

1709536 30467   * MethodKlass

1487816 2600    * ConstantPoolKlass

1009576 2600    * InstanceKlassKlass

904880  2199    * ConstantPoolCacheKlass

741432  30893   java.lang.String

653576  4785    int[]

351760  4397    java.lang.reflect.Method

277824  2894    java.lang.Class

248704  3401    short[]

200888  4411    java.lang.Object[]

193656  4045    java.lang.Object[]

179744  5617    java.util.TreeMap$Entry

175688  1800    java.util.HashMap$Entry[]

165288  6887    java.util.HashMap$Entry

104736  3273    java.lang.ref.SoftReference

104136  4339    java.lang.ref.WeakReference

96096   3521    java.lang.String[]

86160   3590    java.util.Hashtable$Entry

85584   3566    java.util.ArrayList

83472   1206    java.util.Hashtable$Entry[]

82944   1728    java.beans.MethodDescriptor

80560   265     * ObjArrayKlassKlass

69120   1728    java.util.HashMap

52464   3055    java.lang.Class[]

43040   1076    java.util.Hashtable

42496   664     org.apache.commons.modeler.AttributeInfo

37880   947     java.util.TreeMap

33896   557     javax.management.modelmbean.ModelMBeanAttributeInfo[]

33152   518     java.beans.PropertyDescriptor

616     11      org.springframework.aop.framework.ProxyFactory

608     19      java.util.PropertyPermission

608     38      org.springframework.beans.MutablePropertyValues

608     38      org.springframework.beans.factory.support.MethodOverrides

608     2       * ArrayKlassKlass

608     38      org.springframework.beans.factory.config.ConstructorArgumentValues

608     4       org.apache.xerces.impl.XMLDTDScannerImpl

576     24      java.util.Stack

576     36      java.util.regex.Pattern$Category

576     24      org.apache.naming.NamingEntry

560     7       java.net.URL[]

552     23      sun.management.MappedMXBeanType$BasicMXBeanType

552     1       java.util.Locale[]

552     22      java.io.ObjectStreamField[]

544     17      java.util.Collections$SynchronizedMap

176     11      java.util.regex.Pattern$Ctype

8       1       sun.reflect.GeneratedMethodAccessor49

8       1       sun.reflect.GeneratedMethodAccessor6

8       1       sun.reflect.GeneratedConstructorAccessor10

Heap traversal took 12.003 seconds.

u              jinfo的用法

可以輸出並修改執行時的java 程序的opts。用處比較簡單,就是能輸出並修改執行時的java程序的執行引數。用法是jinfo -opt  pid 如:檢視2788的MaxPerm大小可以用  jinfo -flag MaxPermSize 2788。

u              jconsole的用法

jconsole:一個java GUI監視工具,可以以圖表化的形式顯示各種資料。並可通過遠端連線監視遠端的伺服器VM。

用java寫的GUI程式,用來監控VM,並可監控遠端的VM,非常易用,而且功能非常強。命令列裡打 jconsole,選則程序就可以了

不過我沒有執行起來,老是報下面的錯。會的朋友,幫忙看看。

[[email protected] bin]# jconsole

Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException:

No X11 DISPLAY variable was set, but this program performed an operation which requires it.        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)

        at java.awt.Window.<init>(Window.java:317)

        at java.awt.Frame.<init>(Frame.java:419)

        at javax.swing.JFrame.<init>(JFrame.java:194)

        at sun.tools.jconsole.JConsole.<init>(JConsole.java:65)

        at sun.tools.jconsole.JConsole$4.run(JConsole.java:666)

        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

        at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)

        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

u              jdb的用法

用來對core檔案和正在執行的Java程序進行實時地除錯,裡面包含了豐富的命令幫助您進行除錯,它的功能和Sun studio裡面所帶的dbx非常相似,但 jdb是專門用來針對Java應用程式的。

u              jmap的用法

打印出某個java程序(使用pid)記憶體內的,所有‘物件’的情況(如:產生那些物件,及其數量)。

可以輸出所有記憶體中物件的工具,甚至可以將VM 中的heap,以二進位制輸出成文字。使用方法 jmap -histo pid。如果連用SHELL jmap -histo pid>a.log可以將其儲存到文字中去,在一段時間後,使用文字對比工具,可以對比出GC回收了哪些物件。jmap -dump:format=b,file=String 3024可以將3024程序的記憶體heap輸出出來到String檔案裡。

[[email protected] bin]# jmap -histo  25917

Attaching to process ID 26221, please wait...

Debugger attached successfully.

Client compiler detected.

JVM version is 1.5.0_08-b03

Iterating over heap. This may take a while...

Unknown oop at 0xaa6e42d0

Oop's klass is null

Object Histogram:

Size    Count   Class description

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

3722768 30467   * ConstMethodKlass

1976480 25334   char[]

1907880 46994   * SymbolKlass

1762088 2947    byte[]

1709536 30467   * MethodKlass

1487816 2600    * ConstantPoolKlass

1009576 2600    * InstanceKlassKlass

904880  2199    * ConstantPoolCacheKlass

741432  30893   java.lang.String

653576  4785    int[]

351760  4397    java.lang.reflect.Method

277824  2894    java.lang.Class

248704  3401    short[]

200888  4411    java.lang.Object[]

193656  4045    java.lang.Object[]

179744  5617    java.util.TreeMap$Entry

175688  1800    java.util.HashMap$Entry[]

165288  6887    java.util.HashMap$Entry

104736  3273    java.lang.ref.SoftReference

104136  4339    java.lang.ref.WeakReference

96096   3521    java.lang.String[]

86160   3590    java.util.Hashtable$Entry

85584   3566    java.util.ArrayList

83472   1206    java.util.Hashtable$Entry[]

82944   1728    java.beans.MethodDescriptor

80560   265     * ObjArrayKlassKlass

69120   1728    java.util.HashMap

52464   3055    java.lang.Class[]

43040   1076    java.util.Hashtable

42496   664     org.apache.commons.modeler.AttributeInfo

37880   947     java.util.TreeMap

33896   557     javax.management.modelmbean.ModelMBeanAttributeInfo[]

33152   518     java.beans.PropertyDescriptor

616     11      org.springframework.aop.framework.ProxyFactory

608     19      java.util.PropertyPermission

608     38      org.springframework.beans.MutablePropertyValues

608     38      org.springframework.beans.factory.support.MethodOverrides

608     2       * ArrayKlassKlass

608     38      org.springframework.beans.factory.config.ConstructorArgumentValues

608     4       org.apache.xerces.impl.XMLDTDScannerImpl

576     24      java.util.Stack

576     36      java.util.regex.Pattern$Category

576     24      org.apache.naming.NamingEntry

560     7       java.net.URL[]

552     23      sun.management.MappedMXBeanType$BasicMXBeanType

552     1       java.util.Locale[]

552     22      java.io.ObjectStreamField[]

544     17      java.util.Collections$SynchronizedMap

176     11      java.util.regex.Pattern$Ctype

8       1       sun.reflect.GeneratedMethodAccessor49

8       1       sun.reflect.GeneratedMethodAccessor6

8       1       sun.reflect.GeneratedConstructorAccessor10

Heap traversal took 12.003 seconds.

u              jinfo的用法

可以輸出並修改執行時的java 程序的opts。用處比較簡單,就是能輸出並修改執行時的java程序的執行引數。用法是jinfo -opt  pid 如:檢視2788的MaxPerm大小可以用  jinfo -flag MaxPermSize 2788。

u              jconsole的用法

jconsole:一個java GUI監視工具,可以以圖表化的形式顯示各種資料。並可通過遠端連線監視遠端的伺服器VM。

用java寫的GUI程式,用來監控VM,並可監控遠端的VM,非常易用,而且功能非常強。命令列裡打 jconsole,選則程序就可以了

不過我沒有執行起來,老是報下面的錯。會的朋友,幫忙看看。

[[email protected] bin]# jconsole

Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException:

No X11 DISPLAY variable was set, but this program performed an operation which requires it.        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)

        at java.awt.Window.<init>(Window.java:317)

        at java.awt.Frame.<init>(Frame.java:419)

        at javax.swing.JFrame.<init>(JFrame.java:194)

        at sun.tools.jconsole.JConsole.<init>(JConsole.java:65)

        at sun.tools.jconsole.JConsole$4.run(JConsole.java:666)

        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

        at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)

        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

u              jdb的用法

用來對core檔案和正在執行的Java程序進行實時地除錯,裡面包含了豐富的命令幫助您進行除錯,它的功能和Sun studio裡面所帶的dbx非常相似,但 jdb是專門用來針對Java應用程式的。

相關推薦

Java 記憶體洩露監控工具-- JVM監控工具介紹jstack, jconsole, jinfo, jmap, jdb, jstat

u              jstack的用法 如果java程式崩潰生成core檔案,jstack工具可以用來獲得core檔案的java stack和native stack的資訊,從而可以輕鬆地知道java程式是如何崩潰和在程式何處發生問題。另外,jstack工具還可以附屬到正在執行的java程式中,看

Java記憶體洩露監控工具JVM監控工具介紹

jstack -- 如果java程式崩潰生成core檔案,jstack工具可以用來獲得core檔案的java stack和native stack的資訊,從而可以輕鬆地知道java程式是如何崩潰和在程式何處發生問題。另外,jstack工具還可以附屬到正在執行的java程式中,看到 當時執行的java程式的

排查Java 記憶體洩露-藉助排查工具

轉自:https://juejin.im/entry/57fb07255bbb50005b2f20ac java記憶體洩露典型特徵 現象一: 堆/Perm 區不斷增長, 沒有下降趨勢(回收速度趕不上增長速度), 最後不斷觸發FullGC, 甚至crash(如下**兩張圖是同一

JAVA記憶體洩露分析和解決方案及WINDOWS自帶檢視工具

Java記憶體洩漏是每個Java程式設計師都會遇到的問題,程式在本地執行一切正常,可是佈署到遠端就會出現記憶體無限制的增長,最後系統癱瘓,那麼如何最快最好的檢測程式的穩定性,防止系統崩盤,作者用自已的親身經歷與各位分享解決這些問題的辦法.作為Internet最流行的程式語言之一,Java現正非常流行.我們的網

Java記憶體Dump檔案檢視和分析工具介紹

1.IBM Memory Analyzer 1)下載地址: https://www6.software.ibm.com/sdfdl/1v2/regs2/awadmin/heapanalyzer/Xa.2/Xb.NoLhAb4A5Mgi2gFYiaC87ef6mY6etlyz

Java記憶體洩露與定位

1、為什麼會發生記憶體洩漏 Java如何檢測內在洩漏呢?我們需要一些工具進行檢測,並發現記憶體洩漏問題,不然很容易發生down機問題。 編寫java程式最為方便的地方就是我們不需要管理記憶體的分配和釋放,一切由jvm來進行處理,當java物件不再被應用時,等到堆記憶體不夠用時,jvm會進行垃

JAVA 記憶體洩露詳解-值得收藏的好文

非常好的文章, 轉載自:http://blog.csdn.net/anxpp/article/details/51325838     Java的一個重要特性就是通過垃圾收集器(GC)自動管理記憶體的回收,而不需要程式設計師自己來釋放記憶體。理論上Java

java 記憶體洩露

一、java相對於C++來說很難記憶體洩露,因為有自己的垃圾回收機制。如果想知道java出現記憶體洩露,最好先了解java是如何管理記憶體的。Java的記憶體管理就是物件的分配和釋放問題。在Java中,程式設計師需要通過關鍵字new為每個物件申請記憶體空間 (基本型別除外),

詳解java記憶體洩露和如何避免記憶體洩漏

源地址:http://www.xttblog.com/?p=518 一直以來java都佔據著語言排行榜的頭把交椅。這是與java的設計密不可分的,其中最令大家喜歡的不是面向物件,而是垃圾回收機制。你只需要簡單的建立物件而不需要負責釋放空間,因為Java的垃圾回收器會負責記憶

分析和解決JAVA 記憶體洩露的實戰例子

這幾天,一直在為Java的“記憶體洩露”問題糾結。Java應用程式佔用的記憶體在不斷的、有規律的上漲,最終超過了監控閾值。福爾摩 斯不得不出手了! 分析記憶體洩露的一般步驟     如果發現Java應用程式佔用的記憶體出現了洩露的跡象,那麼我們一般採用下面的步驟分

java記憶體洩露

Java的最顯著的優點之一是記憶體管理。你只需要簡單建立物件,java的垃圾收集器來負責分配和釋放記憶體。但是,情況並不是這麼簡單,因為java程式中常發生記憶體洩露。記憶體洩露:應用程式不再使用物件,但是垃圾回收器無法將其刪除,因為它們被引用。在下面的例子中,物件A引用物件

Java記憶體洩露的一個小例子

Java記憶體洩露     一般來說記憶體洩漏有兩種情況。一種情況如在C/C++語言中的,在堆中的分配的記憶體,在沒有將其釋放掉的時候,就將所有能訪問這塊記憶體的方式都刪掉(如指標重新賦值);另一種情況則是在記憶體物件明明已經不需要的時候,還仍然保留著這塊記憶體和它的訪問方式(引用)。第一種情況,在Ja

Java 記憶體洩露 Memory Leak(Oracle官方文件)

The jmap -permgen command prints statistics for the objects in the permanent generation, including information about internalized String instances. S

JAVA 記憶體洩露詳解(原因、例子及解決)

  Java的一個重要特性就是通過垃圾收集器(GC)自動管理記憶體的回收,而不需要程式設計師自己來釋放記憶體。理論上Java中所有不會再被利用的物件所佔用的記憶體,都可以被GC回收,但是Java也存在記憶體洩露,但它的表現與C++不同。 JAVA 中的記憶體管理

Java記憶體洩露原因詳解

###http://www.zhihu.com/people/7e55pu04ed/asks### ###http://www.zhihu.com/people/7e55pu04ed/answers### ###http://www.zhihu.com/people/7e55pu04ed/posts### #

使用docker檢視jvm狀態,在docker中使用jmapjstat

檢視正在執行的容器iddocker ps1這裡我執行的是一個spring boot應用,docker容器id如下   使用docker exec進入Docker容器,命令如下docker exec -it 29198c060396 /bin/sh1 執行jps,已經能看到剛才啟動的spring

利用JAVA VisualVm工具 遠端監控jvm

進入win平臺jdk1.6以上版本安裝目錄 開啟$JAVA_HOME/bin/jvisualvm.exe軟體 編輯許可權檔案 vim jstatd.all.policy #

除錯工具DDMS學習--heap監控app記憶體洩露

使用DDMS的Heap檢視工具可以很方便的確認我們的程式是否存在記憶體洩漏的可能性。 DDMS使用步驟 2.使用usb線連線手機和電腦,手機開啟允許除錯 3.啟動eclipse,點選選單欄的ddms或windows-open perspective-other-ddms以

jdk工具jvm記憶體監控工具jconsole配置與記憶體溢位分析

一、jconsole配置 jconsole.exe是jdk自帶的一款監控jvm的工具,在jdk的bin目錄下 開啟介面如下:  其中:監控本地jvm可以在下拉選中選擇,監控遠端jvm需要在tomcat啟動檔案裡新增配置 開啟tomcat/bin目錄,用記事本開啟catalin

JavaJVM監控工具分享

Java之JVM監控工具分享 JVM的基本知識常用的也就是類載入機制,記憶體區域、分配、OOM,GC,JVM引數調優 幾個連結