`
dreamoftch
  • 浏览: 486525 次
  • 性别: 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

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

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

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

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

    NULL 博文链接:https://kennylee26.iteye.com/blog/1402260

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

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

    visualVM_131

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

    JAVA JVM内存监控工具总结

    它囊括的命令行工具包括jps,jstat,jmap,jinfo,jstack,JConsole,这些工具与JDK的标准版本是一致的。 jinfo:可以输出并修改运行时的java进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地...

    JVM-Tunning-Tools-Introduction

    jvm相关工具,jmap, jstack,jstat,jconsole等一系列的工具的介绍。很全面。书籍很清晰。

    Troubleshooting Guide for Java

    • JConsole • The jdb Utility • The jinfo Utility • The jmap Utility • The jps Utility • The jrunscript Utility • The jstack Utility • The jstat Utility • The visualgc Tool • Control+Break ...

    Visual_131_32656 (1).exe

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

    JVM监控工具介绍

    JVM监控工具介绍:详细介绍jstack, jconsole, jinfo, jmap, jdb, jstat 等命令的使用方法

    jvm信息jmap使用的基本方法教程

    JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,下面这篇文章主要给大家介绍了关于jvm信息jmap使用的基本方法教程,需要的朋友...

    jvm工具、参数调优&调试技巧

    2. jstat:虚拟机统计信息监视工具 2 3. jinfo:java配置信息工具 3 4. jhat:虚拟机堆转储快照分析工具 3 5. jmap:内存映像工具 3 6. jstack:java堆栈跟踪工具 3 7. VisualVM:多合一故障处理工具 3 8. jconsole...

    leetcode回朔与贪心的题目-interview:面试官的编程

    jConsole 3. 多线程 3.1 线程的通信与状态转化 3.2 线程池及其实现 3.3 JUC 3.4 AQS 与 CAS 3.5 性能调优 4. 数据结构 4.1 Hash 表 4.2 二叉树 4.3 堆 4.4 图 4.5 AVL 树 4.6 红黑树 4.7 B 树 4.8 B+ 树 5. 算法 5.1...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

    包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC、类加载器、内存分配与回收策略等,全套视频加资料高清无密码  第1讲 说在前面的话 免费 00:05:07  第2讲 整个部分要讲的内容说明 免费 00:06:58  第3讲...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第51节虚拟机工具-jstat详解00:09:20分钟 | 第52节虚拟机工具-jinfo详解00:05:03分钟 | 第53节虚拟机工具-jmap详解00:08:48分钟 | 第54节虚拟机工具-jhat详解00:08:10分钟 | 第55节虚拟机工具-jstack详解00:10:...

    Java虚拟机

    4.2.2 jstat:虚拟机统计信息监视工具 4.2.3 jinfo:Java配置信息工具 4.2.4 jmap:Java内存映像工具 4.2.5 jhat:虚拟机堆转储快照分析工具 4.2.6 jstack:Java堆栈跟踪工具 4.2.7 HSDIS:JIT生成代码反汇编 ...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    虚拟机堆转储快照分析工具 / 84 4.2.6 jstack:Java堆栈跟踪工具 / 85 4.3 JDK的可视化工具 / 87 4.3.1 JConsole:Java监视与管理控制台 / 88 4.3.2 VisualVM:多合一故障处理工具 / 96 4.4 本章小结 / 105 第5...

    Windouws 64 位Tomcat7.0.40 + 64位jdk1.7.0u21 绿色版.part1

    │ │ jconsole.exe │ │ jdb.exe │ │ jhat.exe │ │ jinfo.exe │ │ jli.dll │ │ jmap.exe │ │ jps.exe │ │ jrunscript.exe │ │ jsadebugd.exe │ │ jstack.exe │ │ jstat.exe │ │ jstatd.exe │...

Global site tag (gtag.js) - Google Analytics