`
wensong
  • 浏览: 127372 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java自带的jvm分析工具(转载)

阅读更多

原文:java自带的jvm分析工具

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

1.jps
类似ps -ef|grep java 显示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进程号。

分享到:
评论

相关推荐

    (二)MATJVM 内存分析工具.MAT JVM 内存分析工具.MAT JVM 内存分析工具.

    MAT JVM内存分析工具可以帮助开发者深入理解Java虚拟机(JVM)的内存管理机制,通过分析堆内存快照来识别内存消耗异常的情况。 首先,MAT提供了丰富的视图来帮助用户查看内存状态,例如“概述”视图可以快速了解堆...

    JVM分析工具

    为了确保应用的高效运行和优化,开发者通常会使用一系列的JVM分析工具。以下是对这些工具的详细介绍: 1. **jmap**: `jmap` 是一个命令行工具,它允许开发者获取堆内存的详细信息,包括堆的配置、对象统计、类...

    IBM JVM javaCore 分析工具

    IBM JVM 分析工具,JCA,javaCore查看工具

    idea插件JVM内存工具JProfiler11

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

    java 测试jvm工具可执行加入

    java 测试jvm工具可执行加入java 测试jvm工具可执行加入java 测试jvm工具可执行加入java 测试jvm工具可执行加入java 测试jvm工具可执行加入java 测试jvm工具可执行加入java 测试jvm工具可执行加入java 测试jvm工具可...

    javacore分析工具

    在实际使用JavaCore分析工具时,你需要先触发JVM生成JavaCore文件,这通常可以通过在服务器上设置相应的JVM参数实现。然后,使用分析工具打开这个文件,查看线程堆栈、内存分配、类加载等信息。通过这些信息,你可以...

    jvm分析工具JProfiler,java应用内存溢出堆栈快照分析工具

    **JProfiler:强大的Java JVM分析工具** JProfiler是一款专业的Java虚拟机(JVM)分析工具,它能够帮助开发者深入理解应用程序的性能瓶颈,优化内存管理,以及排查内存泄漏等问题。这款软件提供了丰富的功能,包括...

    mat(mac)---jvm内存分析工具

    MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具,尤其适用于Mac OS X平台。这款工具可以帮助开发者诊断和解决Java应用中的内存泄漏问题,提高应用性能。MAT通过深入分析堆转储...

    jvm内存分析工具mat安装包

    MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的JVM内存分析工具,尤其适用于诊断Java应用程序的内存泄漏问题。在Java开发过程中,内存溢出(Out Of Memory)问题常常会导致程序异常终止,而MAT就是解决这类...

    java 查看JVM中所有的线程的活动状况

    此外,`jstack`工具是Java开发工具集(JDK)的一部分,它能以命令行形式输出JVM中线程的详细堆栈跟踪信息,这对于远程服务器上的应用非常有用。在命令行中运行`jstack &lt;pid&gt;`(pid是Java进程的ID),即可查看该进程...

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

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

    Java Jar JVM Exe

    Java Jar JVM Exe 可执行文件 Java Jar JVM Exe 可执行文件 Java Jar JVM Exe 可执行文件 Java Jar JVM Exe 可执行文件 Java Jar JVM Exe 可执行文件

    ibm HeapAnalyzer JVM内存分析工具 ha457.jar下载

    IBM HeapAnalyzer是一款强大的Java虚拟机(JVM)内存分析工具,专为诊断和解决Java应用程序的内存泄漏问题而设计。这个工具能够帮助开发者深入理解Java应用程序的内存使用情况,从而优化性能并防止由于内存泄漏导致...

    后端JAVA虚拟机JVM调优必备工具

    IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] &gt; /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...

    zabbix监控JAVA 进程 JVM数据统计分析告警监控

    zabbix自动发现JAVA进程,并进行自动添加监控JAVA 进程的JVM数据,统计分析告警监控。 支持多种中间件,tomcat、weblogic、微服务方式部署JAVA应用监控。 自带发现脚本和监控脚本,以及zabbix导入模板。

    精通Java监控:JVM监控工具的使用与实践

    本文将详细介绍如何在Java中使用JVM监控工具,包括监控工具的选择、基本使用方法、数据分析技巧和实际应用案例。 JVM监控工具是Java开发者的重要伙伴,它们提供了对Java应用程序内部运行机制的洞察。通过本文的详细...

    JAVA应用JVM原理及参数调优深入讲解视频.zip

    JAVA应用JVM原理及参数调优深入讲解视频.1 JAVA应用JVM原理及参数调优深入讲解视频.2 JAVA应用JVM原理及参数调优深入讲解视频.3 JAVA应用JVM原理及参数调优深入讲解视频.4 JAVA应用JVM原理及参数调优深入讲解视频.5 ...

    jca javacore分析工具

    - 使用合适的JVM调优参数,比如设置合理的堆大小,启用垃圾收集日志,以帮助分析工具获取更全面的信息。 - 学习和理解JVM内存模型,包括堆、栈、方法区等,有助于更好地分析内存问题。 6. **标签解析**: - "jvm...

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

    实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送)

    JAVA jvm DUMP 内存分析

    性能测试,线程的 dump 看到线程的 死锁,等待 运行状态

Global site tag (gtag.js) - Google Analytics