`
dreamoftch
  • 浏览: 495365 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jconsole, jstat, jmap, jstack, gc

阅读更多

 

 

通过工具jconsole查看:

直接执行命令:jconsole即可,通过jconsole可以手动执行gc,检测死锁,查看内存信息

 

一:分析死锁:

 

参考资料(http://www.cnblogs.com/ilahsa/archive/2013/06/03/3115410.html)

 

模拟死锁代码:DemoServiceImpl.java

 

package com.tch.test.dubbo_service_provider.serviceImpl;

import com.tch.test.dubbo_service_model.service.DemoService;

public class DemoServiceImpl implements DemoService {

	private Object resource1 = new Object();
	private Object resource2 = new Object();
	
	public String sayHello(String name) {
		deadLock();
		return "Hello " + name;

	}
	
	public void deadLock(){
		lockResource1();
		lockResource2();
	}

	private void lockResource1() {
		new Thread(new Runnable() {
			public void run() {
				synchronized(resource1){
					System.out.println(Thread.currentThread().getId() + ": i have get the lock of resource1");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getId() + ": i begin to get the lock of resource2");
					synchronized(resource2){
						System.out.println(Thread.currentThread().getId() + ": i have get the lock of resource2");
					}
				}				
			}
		}).start();
	}
	
	private void lockResource2() {
		new Thread(new Runnable() {
			public void run() {
				synchronized(resource2){
					System.out.println(Thread.currentThread().getId() + ": i have get the lock of resource2");
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getId() + ": i begin to get the lock of resource1");
					synchronized(resource1){
						System.out.println(Thread.currentThread().getId() + ": i have get the lock of resource1");
					}
				}				
			}
		}).start();
	}

}

 

 

执行命令:

jps

显示出Java进程,其中5900 Jps是我们执行jps的进程,6464 Provider则是我们应用程序的进程,6464也就是我们需要的进程号。

6464 Provider

2712

5900 Jps

 

然后执行:jstack -l 6464

 

就会显示出来很多信息,其中信息的最后是:

Found one Java-level deadlock:

=============================

"Thread-2":

  waiting to lock monitor 0x0000000057437088 (object 0x00000000d5db1d70, a java.lang.Object),

  which is held by "Thread-1"

"Thread-1":

  waiting to lock monitor 0x0000000057436b08 (object 0x00000000d5db1d80, a java.lang.Object),

  which is held by "Thread-2"

 

Java stack information for the threads listed above:

===================================================

"Thread-2":

        at com.tch.test.dubbo_service_provider.serviceImpl.DemoServiceImpl$2.run(DemoServiceImpl.java:52)

        - waiting to lock <0x00000000d5db1d70> (a java.lang.Object)

        - locked <0x00000000d5db1d80> (a java.lang.Object)

        at java.lang.Thread.run(Thread.java:745)

"Thread-1":

        at com.tch.test.dubbo_service_provider.serviceImpl.DemoServiceImpl$1.run(DemoServiceImpl.java:33)

        - waiting to lock <0x00000000d5db1d80> (a java.lang.Object)

        - locked <0x00000000d5db1d70> (a java.lang.Object)

        at java.lang.Thread.run(Thread.java:745)

 

Found 1 deadlock.

 

明确显示了死锁的位置。。。

 

 

二:查看应用程序的内存信息:

 

参考资料(http://liudaoru.iteye.com/blog/540772)

 

执行:jmap -dump:format=b,file=dumpFile.bin 6464

会在当前目录生成文件:dumpFile.bin,就可以查看应用程序(jps显示的进程号:6464)内存信息,包含有哪些对象等等

但是该文件是二进制的文件,需要通过:

jhat dumpFile.bin,然后在浏览器地址:http://localhost:7000/即可查看应用程序的内存信息

 

 

三:查看应用程序GC信息:

 

参考资料(http://www.cnblogs.com/alipayhutu/archive/2012/08/20/2647353.html)

 

执行命令:

jstat -gc 6464 3000

可以每隔三秒显示一次应用程序的GC信息

 

分享到:
评论

相关推荐

    JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    本文将介绍五种JVM监控工具:jstack、jconsole、jinfo、jmap和jdb。 jstack jstack是一款命令行工具,用于生成Java应用程序的崩溃dump文件的信息。该工具可以attach到正在运行的Java应用程序中,查看当前运行的...

    JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat.doc

    本文将深入探讨六种关键的JVM监控工具——`jstack`, `jconsole`, `jinfo`, `jmap`, `jdb`, `jstat`——它们各自的功能、应用场景及如何帮助开发者和运维人员诊断并解决JVM中的复杂问题。 #### 1. jstack —— Java ...

    【转】Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    本篇将重点介绍几种常用的JVM监控工具,包括jstack、jconsole、jinfo、jmap以及jdb和jstat。 首先,`jstack`是一个用于打印Java线程堆栈跟踪的工具。当应用出现死锁或者线程阻塞时,jstack可以帮助我们查看各个线程...

    《JVM从入门到入魔》笔记.pdf

    3:JVM内存调优:JVM参数【标准参数、-X参数、-XX参数等】+常用命令【jps、jinfo、jstat、jstack、jmap】+常用工具【jconsole、jvisualvm、Arthas、MAT】+性能优化及总结+高并发场景分析+JVM性能优化指南。

    jvm监控工具介绍

    为了有效地监控和调试Java应用程序,Oracle JDK提供了多种强大的命令行工具,如jconsole、jmap、jstat等。下面将详细解释这些工具的功能和使用场景。 1. **jstack**: jstack是一种用于生成Java线程堆栈跟踪的工具...

    visualVM_131

    它囊括的命令行工具包括jstat, JConsole, jstack, jmap 和 jinfo,这些工具与JDK的标准版本是一致的。 可以使用VisualVM生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,同时它还支持在...

    JDK自带调试工具doc

    本篇将详细介绍JDK自带的几个主要调试工具,包括`jmap`、`jstack`、`jconsole`,以及相关的文档资源。 1. `jmap`:这是一个用于诊断堆内存状况的工具。通过`jmap`,我们可以获取到堆内存的详细映射,包括对象分配...

    JVM监控工具介绍.docx

    例如,如果需要快速定位内存泄漏,可以使用`jmap -histo` 或者结合`jstat -gc` 和`jmap -heap`。如果关心线程状态,`jstack` 是首选。对于整体性能的可视化监控,`jconsole` 是个不错的选择。熟练掌握这些工具的使用...

    Troubleshooting Guide for Java

    jstat是一个命令行工具,用于显示JVM的统计信息,包括GC活动、堆内存使用等。 #### 十、visualgc工具 visualgc是一款图形化的工具,用于可视化地展示垃圾回收过程。这对于理解垃圾回收策略非常有帮助。 #### 十一...

    JAVA JVM内存监控工具总结

    它包含的工具如jps、jstat、jmap、jinfo、jstack和JConsole,都是JDK的标准组成部分,帮助开发者深入理解JVM的内存状态。 1. **jps (Java Virtual Machine Process Status Tool)** 类似于Unix系统中的`ps`命令,...

    Visual_131_32656 (1).exe

    isualVM是一种集成了多个JDK命令行工具的...它囊括的命令行工具包括jstat, JConsole, jstack, jmap 和 jinfo,这些工具与JDK的标准版本是一致的。 可以使用VisualVM生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器

    jvm内存监控工具使用

    本文将深入探讨 VisualVM 及其集成的一系列命令行工具,包括 jps、jstat、jmap、jinfo、jstack 和 JConsole,帮助读者掌握 JVM 内存监控的核心技巧。 #### VisualVM:JVM 监控的全能工具 VisualVM 是一款功能强大...

    VisualVM-入门指南.docx

    VisualVM 能够提供强大的分析能力,囊括多个 JDK 命令行工具,如 jstat, JConsole, jstack, jmap 和 jinfo 等,帮助开发者快速、方便地查看多个 Java 应用程序的相关信息。 什么是 Visual VM? VisualVM 是一个...

    JVM监控工具介绍

    本文将详细介绍JVM自带的一些核心监控工具,包括jstack、jconsole、jinfo、jmap、jdb和jstat等命令的使用方法。 #### jstack **概述:** jstack是一个强大的诊断工具,主要用于获取JVM中的线程快照。当Java程序...

    Java监控工具.pdf

    2. **jconsole**: jconsole 提供了一个图形用户界面,用于监控JVM的性能,包括线程使用、内存使用和垃圾收集(GC)状态。它可以帮助开发者识别内存泄漏和性能瓶颈。 3. **jhat**: jhat 用于分析Java堆转储。当需要在...

    Tomcat教程-JVM相关工具.docx

    jvisualvm是另一个功能强大的Java应用性能分析工具,集成了多种JDK工具的功能,如jconsole、jstack、jmap等,提供了一个统一的可视化界面。 了解并熟练运用这些JVM工具,可以帮助开发者和运维人员更好地理解Tomcat...

    java—JDK内置工具使用技巧详解

    - **功能**:jstat 用于收集 JVM 的实时统计信息,如 GC 活动、内存使用情况等。 - **使用场景**:适用于需要快速查看 JVM 性能指标的情况,尤其是在性能调优阶段。 - **命令格式**:`jstat [options] &lt;pid&gt; ...

    自己动手写Java虚拟机

    - 调优工具的使用:如jmap、jstat、jstack、jconsole等进行资源监控和性能分析。 5. **内存管理和垃圾回收**: - 内存分配:了解对象如何在堆上分配和回收。 - 垃圾回收算法:不同的垃圾回收算法及其在JVM中的...

    细述 Java垃圾回收机制→Java Garbage Collection Monitoring and Analysis1

    它整合了多个Java诊断工具,如JConsole、jstat、jinfo、jstack和jmap等,提供了一系列功能,包括: 1. **生成和分析堆内存的dump**:当应用遇到内存问题时,VisualVM可以生成heap dump文件,通过分析这些文件,...

    jvm问题排查

    - 使用`jstat`监控GC活动,了解GC的压力。 - 调整JVM参数,如增大年轻代或老年代的大小。 - 优化代码逻辑,减少对象创建。 ##### 3. **线程死锁** - **表现形式**:多个线程相互等待对方持有的锁,从而无法继续...

Global site tag (gtag.js) - Google Analytics