`

java自带的jvm分析工具

 
阅读更多

这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了。上网搜了搜,发现下面这些是比较常用的,然后我在机器上试试了,把结果也贴出来哈。 

1.jps 
类似ps -ef|grep java 显示java进程号 

或者pgrep java
2.jstack 
打印jvm内存的堆栈信息,打印出来的结果类似 
2010-04-21 20:10:51 
Full thread dump Java HotSpot(TM) Server VM (10.0-b23 mixed mode): 

"RMI TCP Connection(idle)" daemon prio=10 tid=0x08f7a000 nid=0x1928 waiting on condition [0x4b234000..0x4b2350a0] 
   java.lang.Thread.State: TIMED_WAITING (parking) 
at sun.misc.Unsafe.park(Native Method) 
- parking to wait for  <0x68ec3430> (a java.util.concurrent.SynchronousQueue$TransferStack) 
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198) 
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424) 
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323) 
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874) 
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:944) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906) 
at java.lang.Thread.run(Thread.java:619) 

"Attach Listener" daemon prio=10 tid=0x08a08800 nid=0x18e4 runnable [0x00000000..0x4b142068] 
   java.lang.Thread.State: RUNNABLE 

"recvMsgTP-1_sharereport_groupId_refund_[daily]-33040763-3-thread-10" prio=10 tid=0x08f3d400 nid=0x2985 waiting on condition [0x4b192000..0x4b192fa0] 
   java.lang.Thread.State: WAITING (parking) 
at sun.misc.Unsafe.park(Native Method) 
- parking to wait for  <0x6af53cd8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) 
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358) 
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:946) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906) 
at java.lang.Thread.run(Thread.java:619) 

这样我们可以根据打印结果,看到现在哪些线程在运行,哪些在等待, 进而再找到线程等待执行的原因,从而分析出程序执行变慢的原因。 

3.jstat -gcutil 
对java 垃圾回收信息的统计,这样我们可以得到垃圾回收是否正常,full GC的执行时间和频率是否正常等。 
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
  8.34   0.00  53.24  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.54  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.93  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.93  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.93  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.97  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.98  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.98  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.98  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  54.01  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  54.40  13.14  51.77     74    7.596    28   25.099   32.695 

后面加T表示的是Time 执行时间,单位是秒 
YGC  FGC 分别是young GC和Full GC执行的次数。 


4.jinfo - flags 
  可以查询java运行的参数设置 
Attaching to process ID 21982, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 10.0-b23 

-Dprogram.name=run.sh -Xms1024m -Xmx1024m -XX:NewSize=320m -XX:MaxNewSize=320m -XX:PermSize=96m -XX:MaxPermSize=96m -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -Xdebug -Xrunjdwp:transport=dt_socket,address=18787,server=y,suspend=n -Djava.net.preferIPv4Stack=true 

5.jmap 
-histo 
打印出java中的对象信息,包括实例个数,字节大小和完整类名。 
num     #instances         #bytes  class name 
---------------------------------------------- 
   1:        660495       66381608  [C 
   2:        134119       34894408  [B 
   3:         73441       30779672  [I 
   4:        670401       16089624  java.lang.String 
   5:        125062       15547312  <constMethodKlass> 
   6:        427296       13673472  java.util.TreeMap$Entry 
   7:        328585       13143400  java.util.concurrent.ConcurrentHashMap$EntryIterator 
   8:        125062       10010904  <methodKlass> 
   9:        132205        8504792  [Ljava.lang.Object; 
  10:        173806        7883528  <symbolKlass> 


这些命令后面都要加上java进程号。 

分享到:
评论

相关推荐

    idea插件JVM内存工具JProfiler11

    IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能调优,其中就包括JProfiler11这款强大的JVM内存分析工具。本文将详细介绍如何使用Idea中的JProfiler11插件,...

    java之jvm学习笔记八(实践对jar包的代码签名)

    在Java中,我们可以使用Java自带的工具如`jarsigner`来完成这个过程。代码签名的主要步骤包括生成密钥对(公钥和私钥)、使用私钥对JAR文件签名以及验证签名。 首先,我们需要生成一个密钥对。在命令行中,可以使用...

    Java自带的性能监控工具使用简介

    VisualVM 是 Java 6 自带的性能监控工具,可以监控 JVM 的性能,包括堆内存、线程、类加载等信息。VisualVM 可以远程监控 JVM,需要在远程机器上启动 jstatd 守护进程, 并在本地机器上使用 VisualVM 连接到远程机器...

    java内存分析工具dumpAnalyzer

    1. **生成dump文件**:当应用出现性能问题时,可以使用JDK自带的`jmap`命令或者操作系统的工具生成堆转储文件。 2. **打开dumpAnalyzer**:导入生成的dump文件到dumpAnalyzer中,启动分析。 3. **分析与诊断**:...

    JVM调优工具命令详解.pdf

    本篇文档详细介绍了JVM调优工具的命令使用及其相关知识点,涵盖了内存信息分析、死锁检测、JMX远程监控等方面的命令行工具的使用方法。 首先,文档提到了JPS命令,它用于查看当前运行的Java进程信息,并返回进程ID...

    JVM 监控 调优 工具

    1. **JConsole**:这是Java SDK自带的一个图形化监控工具,可以查看JVM的内存使用情况、线程状态、类加载情况等。 2. **VisualVM**:功能更为强大的多合一JVM分析工具,提供CPU和内存分析、线程快照、方法Profiling...

    JVM监控工具使用入门

    本文将详细介绍JDK自带的一些强大的JVM监控工具,包括jconsole、jvisualvm以及Oracle JRockit Mission Control (JRMc),并指导如何利用这些工具进行本地和远程JVM监控。 #### 监控工具介绍 ##### jconsole ...

    使用java自带工具监控jvm运行状态

    除了上述工具,还有其他如`jmap`(用于生成堆转储文件和查看内存映射)、`jhat`(分析堆转储文件)和`jmc`(Java Mission Control,一个更全面的性能分析工具集)等,它们提供了丰富的功能来帮助开发者深入理解JVM的...

    JAVA JVM性能调优监控工具详解

    `jps`是JDK自带的一个简单实用的工具,用于列出当前正在运行的所有Java应用程序的进程ID以及基本状态信息。其语法格式如下: ```shell jps [options] [hostid] ``` 如果不指定`hostid`,则默认为当前主机。`jps`的...

    jvm分析资料及工具1

    本资源包“jvm分析资料及工具1”显然是针对Java开发者,尤其是那些希望深入理解JVM内部工作原理、优化应用程序性能的人员。在这里,我们将深入探讨JVM分析的相关知识点,并介绍一些常用工具。 1. **JVM内存模型**:...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    JDK自带了一系列强大的诊断工具,如jps(Java进程查看器)、jstat(统计信息工具)、jinfo(配置信息工具)、jmap(内存映射工具)、jhat(堆转储分析工具)和jstack(线程堆栈跟踪工具)。熟练掌握这些工具的使用,...

    JVM调优工具分享

    首先,JConsole是Java 5及更高版本JDK自带的一款监控和管理控制台。它基于JMX(Java Management Extensions),提供了图形用户界面来监控JVM中的内存、线程和类等状态。要启动JConsole,只需在JDK的bin目录下运行...

    java应用JVM的GC频率观察方法

    例如,JConsole也是JDK自带的监控工具,通过JMX接口可以远程连接到Java应用,展示包括GC在内的各种性能指标。GCMonitor是一个轻量级的监控框架,可以直接集成到应用中,以低侵入性的方式监控GC状态。 监控GC频率的...

    IBM内存分析工具(java)

    通过`jmap -dump:format=b,file=&lt;dump_file&gt;`命令,我们可以将JVM的内存状态导出为二进制格式的dump文件,这是IBM内存分析工具分析的基础。 4. **MAT的分析功能** - **内存泄漏探测器**:MAT可以检测出对象实例的...

    jvm瓶颈定位 java jvm 学习

    - JConsole:Java自带的图形化监控工具,可以查看JVM的内存、线程、类加载等信息。 - VisualVM:强大的多合一工具,提供了更详细的性能分析和故障排查功能。 - JProfiler:商业性能分析工具,提供CPU、内存、线程...

    JDK自带VM分析工具

    在 Java 开发领域,深入理解并有效利用 Java 开发工具包(JDK)自带的各种虚拟机(VM)分析工具对于提高应用程序性能至关重要。本文将详细介绍 JDK 自带的几个核心 VM 分析工具:jps、jstat、jmap 和 jconsole,并...

    java基础之JVM

    4. **GC分析命令调优**:用于监控和优化GC性能的一系列工具和技术。 #### 二、JVM的加载机制 **2.1 什么是类的加载机制** 类的加载机制是指将Java类的`.class`文件加载到内存中,并准备好供执行的一系列过程。这...

    实战Java虚拟机——JVM故障诊断与性能优化.pdf

    4. **性能监控与调优工具**:JDK自带的一些工具,如jconsole、jvisualvm、jmap、jstack等,是JVM性能分析的重要辅助。书中可能详细讲解了这些工具的使用方法和分析技巧。 5. **JVM参数设置**:了解并合理设置JVM...

    JAVA代码优化工具

    4. **JConsole**: JConsole是Java平台自带的监控和管理工具,可以用来监视JVM的内存、线程、类加载、Garbage Collection等状态,帮助开发者理解应用的运行状况。 5. **IntelliJ IDEA 内置优化功能**: IntelliJ IDEA...

Global site tag (gtag.js) - Google Analytics