Java常用命令(工具)

启动参数加上-XX:+HeapDumpOnOutOfMemoryError,使在内存溢出时创建dump文件。
 
打开Java监视和管理控制台: jconsole
打开Java VisualVM: jvisualvm
查看Java进程号: jps -v
进行thread dump: jstack -f pid
显示Java系统属性、JVM参数等配置信息: jinfo pid
 
调试工具:    jdb

1. 开启jdb,有2种方式:

1) 另开一个JVM进行调试:

 

jdb ClassName

2) 在已存在的JVM中进行调试:

java -agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n ClassName
jdb -attach jdbconn 

 

2. jdb基本命令

1)  run 开启jdb并设置断点后,启动执行app。
2) stop at ClassName:linenum 在第linenum行设置断点
3) stop in ClassName.methodName 设置方法断点
4) stop in ClassName.methodName(int, java.lang.String) 当具有overloaded方法时,需指定方法参数类型

5) cont 继续运行直到下个断点

6) step  步进

7) print obj  输出变量值

8) catch ExceptionClassName  当发生指定异常时stop

9) ignore 取消catch命令的效果

10) exit  退出jdb

 

使用 jmap jhat 来监控内存:

1) jmap -dump:live,format=b,file=dumpfile pid

2) jhat -J-mx512m dumpfile

然后会提示类似如下:

 

Reading from e:/heap2.tmp...
Dump file created Thu Mar 21 15:29:59 CST 2013
Snapshot read, resolving...
Resolving 586350 objects...
Chasing references, expect 117 dots.............................................
........................................................................
Eliminating duplicate references................................................
.....................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

 然后可以访问以下地址,查看相关信息:

 http://localhost:7000/ 

 http://localhost:7000/histo/

 http://localhost:7000/showInstanceCounts/

 http://localhost:7000/showInstanceCounts/includePlatform/

 http://localhost:7000/oql/

 

监控VM使用量:   jstat

 jstat -class pid         显示加载class的数量,及所占空间等信息

 jstat -compiler pid   显示VM实时编译的数量等信息

 jstat -gc pid              显示gc的信息,查看gc的次数及时间。最后五项分别是: young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。 

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

 jstat -gcnew pid               new对象的信息。

 jstat -gcnewcapacity pid new对象的信息及其占用量。  
 jstat -gcold pid                 old对象的信息。  
 jstat -gcoldcapacity pid   old对象的信息及其占用量。  
 jstat -gcpermcapacity pid perm对象的信息及其占用量。  
 jstat -gcutil pid                   统计gc信息统计。  
 jstat -printcompilation pid  当前VM执行的信息。 除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。  

 

 

 see:

[Java性能剖析]Sun JDK基本性能剖析工具介绍

[Java性能剖析]Sun JDK可视化性能剖析工具介绍

JDK自带VM分析工具jps,jstat,jmap,jconsole

jmap命令(Java Memory Map)

java内存溢出分析工具:jmap使用实战

性能测试 -- jmap 输出内存中对象 的工具使用 --监控java内存溢出

J2SE6中使用jhat来分析内存堆

JConsole手册

 

 

JMX命令行工具:   jmxterm(一个基于jconsole的jmx client命令行工具,不需要事先开启JMX服务端口)

1) 运行: java -jar jmxterm-xxx.jar

2) $>jvms  列出当前java进程

3) $>open PID  连接上要查看的java进程

4) $>domains 显示当前可查看的bean域

5) $>beans 上一步所列出的domain(如:$>beans java.lang )  显示该域下可查看的bean

6) $>bean 上一步所列出的bean(如:$>bean java.lang:type=Memory)选定该bean

7) $>info  显示上一步所选定的bean下可查看的属性

8) $>get 上一步所列出的属性名(如:$>get ObjectPendingFinalizationCount) 显示该属性值

过程中显示的信息如下:

c:\>java -jar jmxterm-1.0.jar
Welcome to JMX terminal. Type "help" for available commands.
$>jvms
9184     ( ) - jmxterm-1.0.jar
8760     ( ) - jdiary.jar
4200     ( ) -
$>open 8760
#Connection to 8760 is opened
$>domains
#following domains are available
JMImplementation
com.sun.management
java.lang
java.util.logging
$>beans java.lang
#domain = JMImplementation:
JMImplementation:type=MBeanServerDelegate
#domain = com.sun.management:
com.sun.management:type=HotSpotDiagnostic
#domain = java.lang:
java.lang:name=Code Cache,type=MemoryPool
java.lang:name=CodeCacheManager,type=MemoryManager
java.lang:name=PS Eden Space,type=MemoryPool
java.lang:name=PS MarkSweep,type=GarbageCollector
java.lang:name=PS Old Gen,type=MemoryPool
java.lang:name=PS Perm Gen,type=MemoryPool
java.lang:name=PS Scavenge,type=GarbageCollector
java.lang:name=PS Survivor Space,type=MemoryPool
java.lang:type=ClassLoading
java.lang:type=Compilation
java.lang:type=Memory
java.lang:type=OperatingSystem
java.lang:type=Runtime
java.lang:type=Threading
#domain = java.util.logging:
java.util.logging:type=Logging
$>bean java.lang:type=Memory
#bean is set to java.lang:type=Memory
$>info
#mbean = java.lang:type=Memory
#class name = sun.management.MemoryImpl
# attributes
  %0   - HeapMemoryUsage (javax.management.openmbean.CompositeData, r)
  %1   - NonHeapMemoryUsage (javax.management.openmbean.CompositeData, r)
  %2   - ObjectPendingFinalizationCount (int, r)
  %3   - Verbose (boolean, rw)
# operations
  %0   - void gc()
# notifications
  %0   - javax.management.Notification(java.management.memory.threshold.exceeded
,java.management.memory.collection.threshold.exceeded)
$>get ObjectPendingFinalizationCount
#mbean = java.lang:type=Memory:
ObjectPendingFinalizationCount = 0;
$>

 

其他命令可通过help进行查询,对于每个命令也可以通过 -h 查看其参数用法。

 

 

 

你可能感兴趣的:(java)