Java常用命令(工具)

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

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

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

jdb ClassName

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

1.进程启动命令:
java -agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=y ClassName
或者
java -Xdebug -Xrunjdwp:transport=dt_socket,address=jdbconn,server=y,suspend=n
2.进程启动后进行jdb:
jdb -attach jdbconn 

其中:
transport 指定调试数据的传送方式:

dt_socket是指用SOCKET模式;

dt_shmem指用共享内存方式,dt_shmem只适用于Windows平台(windows平台只能用dt_shmem方式,用eclipse远程调试则不限);

suspend 指定是否在调试客户端建立起来后再执行JVM。

其他参数:

onthrow 指定当产生该类型的Exception时,JVM就会中断下来,进行调式。该参数可选。
launch 指定当JVM被中断下来时执行的可执行程序。该参数可选。
onuncaught(=y或n) 指定出现uncaught exception 后,是否中断JVM的执行。该参数可选。

 

 

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) jmap -histo pid  查看JVM堆中对象详细占用情况

3) 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手册

使用JMAP dump及分析dump文件

 

 

 

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 查看其参数用法。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值