jconsole, jstat, jmap, jstack, gc

2024-03-19 22:48
文章标签 gc jmap jstack jconsole jstat

本文主要是介绍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信息

 

这篇关于jconsole, jstat, jmap, jstack, gc的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827475

相关文章

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Spark学习之路 (十四)SparkCore的调优之资源调优JVM的GC垃圾收集器

《2021年最新版大数据面试题全面开启更新》 欢迎关注github《大数据成神之路》 目录 一、概述 二、垃圾收集器(garbage collector (GC)) 是什么? 三、为什么需要GC? 四、为什么需要多种GC? 五、对象存活的判断 六、垃圾回收算法 6.1 标记 -清除算法 6.2 复制算法 6.3 标记-整理算法 6.4 分代收集算法 七、垃圾收集器 7.1 Serial收集器

Kafka 为了避免 Full GC,竟然还在发送端设计了内存池,自己管理内存,太巧妙了...

一、开篇引出一个 Full Gc 的问题 在上一篇文章中,我们讲到了 Kafka 发送消息的八个流程,并且着重讲了 Kafka 封装了一个内存结构,把每个分区的消息封装成批次,缓存到内存里。 如下图所示: 上图中,整体是一个 Map 结构,Map 的 key 是分区,Map 的值是一个队列;队列里有一个个的小批次,里面是很多消息。 这样好处就是可以一次性的把消息发送出去,不至于来一条发送一条,

JVM中的GC过程

堆内存结构:在详细讨论GC过程之前,需要了解JVM堆内存的结构。JVM堆内存通常被分为新生代(Young Generation)和老年代(Old Generation),其中新生代又进一步细分为Eden区(Eden Space)和两个Survivor区(S0和S1,也称为From和To区)。从JDK 1.8开始,永久代(Permanent Generation)被元空间(Metaspace)所取代

Spark GC 调优

我们的Spark环境目前主要问题是数据量大后一些task的GC Time 特别长,多则几分钟,少则几十秒,实在不能忍受。参考databricks的 Tuning Java Garbage Collection for Spark Applications对我们的环境优化后,效果比较明显。 选择垃圾收集器 如果分配给单个Executor的Heap足够大(我认为超过32G)时使用G1,

GC overhead limit exceeded : Spark

我在运行Spark程序的时候报错 java.lang.OutOfMemoryError:GC overhead limit exceeded 伴随着通常有: java.lang.OutOfMemoryError:Java heap spaceorg.apache.spark.shuffle.FetchFailedException:Failed to connect to ... 这是

JVM避免频繁的GC

在编写代码时,完全避免垃圾收集(GC)是不可能的,因为Java(以及许多其他现代编程语言)的内存管理是基于自动垃圾收集的。然而,你可以通过一些最佳实践来减少GC的频率和开销,从而优化你的应用程序性能。以下是一些建议: 减少对象创建 尽可能重用对象,而不是每次需要时都创建新对象。 使用对象池来管理可重用对象的生命周期。 优化数据结构 选择合适的数据结构来存储数据,以减少内存占用和访问时间

浅谈gc-垃圾回收

垃圾回收(Garbage Collection 简称GC) 垃圾回收几种常用的算法有 l 引用计数法 l 标记清除法 l 复制算法 l 标记压缩法 引用计数法 引用计数法实现非常简单,对于对象A,只要有任何对象引用了A,则A的引用计数器则加1,当引用失效时则减1。只要对象A的引用计数器达到0,则对象A是不能被使用的,在下次GC时,则被当做回收对象被回收。   引用计数算法

gitlab 上源码Merge后出现git gc的解决方案

问题: 远程主分支在merger其他分支的请求后,本地主分支pull 远程分支出现git gc * branch master -> FETCH_HEADAuto packing the repository for optimum performance. You may alsorun "git gc" manually. See "git help g

JVM 垃圾回收机制:GC

目录 一、死亡对象的判断算法 1.1 引用计数算法 1.2 可达性分析算法 二、垃圾回收算法 2.1 标记-清除算法 2.2 复制算法 2.3 标记-整理算法 2.4 分代算法 三、垃圾收集器 3.1 CMS收集器(老年代收集器,并发GC) 3.2 G1收集器(唯一一款全区域的垃圾回收器) JVM的垃圾回收机制:GC,是Java提供的对于内存自动回收的机制。 在 J