Java内存分析2

转载:https://my.oschina.net/xionghui/blog/491741

一块看一下

jstat

具体参数如下:

-class:统计class loader行为信息 
-compile:统计编译行为信息 
-gc:统计jdk gc时heap信息 
-gccapacity:统计不同的generations(包括新生区,老年区,permanent区)相应的heap容量情况 
-gccause:统计gc的情况,(同-gcutil)和引起gc的事件 
-gcnew:统计gc时,新生代的情况 
-gcnewcapacity:统计gc时,新生代heap容量 
-gcold:统计gc时,老年区的情况 
-gcoldcapacity:统计gc时,老年区heap容量 
-gcpermcapacity:统计gc时,permanent区heap容量 
-gcutil:统计gc时,heap情况

$ jstat -class 17970 1000 10 (每隔1秒监控一次,一共做10
Loaded  Bytes  Unloaded  Bytes     Time   
  7837  8534.0     1069  1005.7      27.87

LoadedNumber of classes loaded.

BytesNumber of Kbytes loaded.

UnloadedNumber of classes unloaded.

BytesNumber of Kbytes unloaded.

TimeTime spent performing class load and unload operations.

$ jstat -gc 17970 2000 20 (每隔2秒监控一次,共20)

$ jstat -gcutil 17970 1000 10 (按百分比显式
S0C        S1C       S0U      S1U    EC            EU           OC            OU            PC         PU          YGC    YGCT        FGC  FGCT     GCT   
15936.0 15936.0 9030.8  0.0     127872.0 61813.5   901120.0   544712.5  65536.0 35227.8  42078 2796.028  417   498.596 3294.624

S0CCurrent survivor space 0 capacity (KB).

S1CCurrent survivor space 1 capacity (KB).

S0UCurrent survivor space 0 utilization (KB).

S1UCurrent survivor space 1 utilization (KB).

ECCurrent eden space capacity (KB).

EUEden space utilization (KB).

OCCurrent old space capacity (KB).

OUOld space utilization (KB).

PCCurrent permanent space capacity (KB).

PUPermanent space utilization (KB).

YGCNumber of young generation GC Events.

YGCTYoung generation garbage collection time.

FGCNumber of full GC events.

FGCTFull garbage collection time.

GCTTotal garbage collection time.

Java内存分析2_第1张图片

$ jstat -compiler 17970  (显示VM实时编译的数量等信息) 
Compiled Failed Invalid   Time   FailedType FailedMethod 
    3780      1       0   120.26          2 com/xxx/xxx run

jstat –gccapacity :可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OCold内纯的占用量。

[root@localhost 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  OCold内纯的占用量

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对象的信息

[root@localhost 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对象的信息及其占用量

[root@localhost 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对象的信息。

[root@localhost 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对象的信息及其占用量。

[root@localhost 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对象的信息及其占用量。

[root@localhost 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执行的信息。

[root@localhost bin]# jstat -printcompilation -h3  25917 1000 5

1000毫秒打印一次,一共打印5次,还可以加上-h3每三行显示一下标题。

Compiled  Size  Type Method

788  73  1 java/io/File

788  73  1 java/io/File

788  73  1 java/io/File

Compiled  Size  Type Method

788  73  1 java/io/File

788  73  1 java/io/File

jmap

jmap -dump:format=b,file=dump.bin pid 

jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等,目前只有在SolarisLinuxJDK版本里面才有。

观察运行中的jvm物理内存的占用情况

打印出某个java进程(使用pid)内存内的,所有对象的情况(如:产生那些对象,及其数量)。

可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=String 3024可以将3024进程的内存heap输出出来到String文件里。

[root@localhost 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.

jinfo

可以输出并修改运行时的java 进程的opts。用处比较简单,就是能输出并修改运行时的java进程的运行参数。用法是jinfo -opt  pid 如:查看2788MaxPerm大小可以用  jinfo -flag MaxPermSize 2788

雨伞课外补充

jstatd

http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstatd.html

启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099 
实例:jstatd -J-Djava.security.policy=my.policy 
my.policy文件需要自己建立,内如如下: 
grant codebase "file:$JAVA_HOME/lib/tools.jar" { 
permission java.security.AllPermission; 
};

jdb

jdb 用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。

用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。

jconsole

jconsole是基于 (JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来提供实时的性能和资源的监控,包括了Java程序的内存使用,Heap size, 线程的状态,类的分配状态和空间使用等等。

jstat相当。

jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM

java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。命令行里打 jconsole,选则进程就可以了。

你可能感兴趣的:(日常,java内存分析)