这段时间觉得很有必要对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进程号。
相关推荐
IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能调优,其中就包括JProfiler11这款强大的JVM内存分析工具。本文将详细介绍如何使用Idea中的JProfiler11插件,...
在Java中,我们可以使用Java自带的工具如`jarsigner`来完成这个过程。代码签名的主要步骤包括生成密钥对(公钥和私钥)、使用私钥对JAR文件签名以及验证签名。 首先,我们需要生成一个密钥对。在命令行中,可以使用...
VisualVM 是 Java 6 自带的性能监控工具,可以监控 JVM 的性能,包括堆内存、线程、类加载等信息。VisualVM 可以远程监控 JVM,需要在远程机器上启动 jstatd 守护进程, 并在本地机器上使用 VisualVM 连接到远程机器...
1. **生成dump文件**:当应用出现性能问题时,可以使用JDK自带的`jmap`命令或者操作系统的工具生成堆转储文件。 2. **打开dumpAnalyzer**:导入生成的dump文件到dumpAnalyzer中,启动分析。 3. **分析与诊断**:...
本篇文档详细介绍了JVM调优工具的命令使用及其相关知识点,涵盖了内存信息分析、死锁检测、JMX远程监控等方面的命令行工具的使用方法。 首先,文档提到了JPS命令,它用于查看当前运行的Java进程信息,并返回进程ID...
1. **JConsole**:这是Java SDK自带的一个图形化监控工具,可以查看JVM的内存使用情况、线程状态、类加载情况等。 2. **VisualVM**:功能更为强大的多合一JVM分析工具,提供CPU和内存分析、线程快照、方法Profiling...
本文将详细介绍JDK自带的一些强大的JVM监控工具,包括jconsole、jvisualvm以及Oracle JRockit Mission Control (JRMc),并指导如何利用这些工具进行本地和远程JVM监控。 #### 监控工具介绍 ##### jconsole ...
除了上述工具,还有其他如`jmap`(用于生成堆转储文件和查看内存映射)、`jhat`(分析堆转储文件)和`jmc`(Java Mission Control,一个更全面的性能分析工具集)等,它们提供了丰富的功能来帮助开发者深入理解JVM的...
`jps`是JDK自带的一个简单实用的工具,用于列出当前正在运行的所有Java应用程序的进程ID以及基本状态信息。其语法格式如下: ```shell jps [options] [hostid] ``` 如果不指定`hostid`,则默认为当前主机。`jps`的...
本资源包“jvm分析资料及工具1”显然是针对Java开发者,尤其是那些希望深入理解JVM内部工作原理、优化应用程序性能的人员。在这里,我们将深入探讨JVM分析的相关知识点,并介绍一些常用工具。 1. **JVM内存模型**:...
JDK自带了一系列强大的诊断工具,如jps(Java进程查看器)、jstat(统计信息工具)、jinfo(配置信息工具)、jmap(内存映射工具)、jhat(堆转储分析工具)和jstack(线程堆栈跟踪工具)。熟练掌握这些工具的使用,...
首先,JConsole是Java 5及更高版本JDK自带的一款监控和管理控制台。它基于JMX(Java Management Extensions),提供了图形用户界面来监控JVM中的内存、线程和类等状态。要启动JConsole,只需在JDK的bin目录下运行...
例如,JConsole也是JDK自带的监控工具,通过JMX接口可以远程连接到Java应用,展示包括GC在内的各种性能指标。GCMonitor是一个轻量级的监控框架,可以直接集成到应用中,以低侵入性的方式监控GC状态。 监控GC频率的...
通过`jmap -dump:format=b,file=<dump_file>`命令,我们可以将JVM的内存状态导出为二进制格式的dump文件,这是IBM内存分析工具分析的基础。 4. **MAT的分析功能** - **内存泄漏探测器**:MAT可以检测出对象实例的...
- JConsole:Java自带的图形化监控工具,可以查看JVM的内存、线程、类加载等信息。 - VisualVM:强大的多合一工具,提供了更详细的性能分析和故障排查功能。 - JProfiler:商业性能分析工具,提供CPU、内存、线程...
在 Java 开发领域,深入理解并有效利用 Java 开发工具包(JDK)自带的各种虚拟机(VM)分析工具对于提高应用程序性能至关重要。本文将详细介绍 JDK 自带的几个核心 VM 分析工具:jps、jstat、jmap 和 jconsole,并...
4. **GC分析命令调优**:用于监控和优化GC性能的一系列工具和技术。 #### 二、JVM的加载机制 **2.1 什么是类的加载机制** 类的加载机制是指将Java类的`.class`文件加载到内存中,并准备好供执行的一系列过程。这...
4. **性能监控与调优工具**:JDK自带的一些工具,如jconsole、jvisualvm、jmap、jstack等,是JVM性能分析的重要辅助。书中可能详细讲解了这些工具的使用方法和分析技巧。 5. **JVM参数设置**:了解并合理设置JVM...
4. **JConsole**: JConsole是Java平台自带的监控和管理工具,可以用来监视JVM的内存、线程、类加载、Garbage Collection等状态,帮助开发者理解应用的运行状况。 5. **IntelliJ IDEA 内置优化功能**: IntelliJ IDEA...