jmc线程转储

线程转储是解决生产问题/调试生产问题的重要工件。 在像过去我们已经讨论了几种有效的线程转储故障模式: 堵车 , 跑步机 , RSI , 一个 LL条条大路通罗马 .........。 在本文中,我们想介绍另一种线程转储故障排除模式。

 How to capture thread dumps?  There are 8 different options to capture thread dumps. You can use the option that is convenient to you. dumps. You can use the option that is convenient to you. 

线程转储通常在线程堆栈跟踪中包含异常或错误。 应该检查在其堆栈跟踪中包含异常或错误的线程。 因为它们指出了问题的根源。

最近,一个应用程序引发了java.lang.OutOfMemoryError。 从此应用程序捕获了线程转储。 当我们分析线程转储时,我们会注意到一个特定的线程正在抛出java.lang.OutOfMemoryError:

 Thread 0x3ff781e764e0 at java.lang.OutOfMemoryError.<init>()V (OutOfMemoryError.java:48) at java.lang.ClassLoader.defineClass1(Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class; (Native Method) at java.lang.ClassLoader.defineClass(Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; (ClassLoader.java:757) at java.lang.ClassLoader.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class; (ClassLoader.java:636) at sun.reflect.GeneratedMethodAccessor37.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Method.java:498) at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Ljava/lang/String;[B)Ljava/lang/Class; (Injector.java:125) at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Ljava/lang/ClassLoader;Ljava/lang/String;[B)Ljava/lang/Class; (Injector.java:48) at com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Class; (AccessorInjector.java:51) at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(Ljava/lang/reflect/Field;)Lcom/sun/xml/bind/v2/runtime/reflect/Accessor; (OptimizedAccessorFactory.java:128) at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Lcom/sun/xml/bind/v2/runtime/JAXBContextImpl;)Lcom/sun/xml/bind/v2/runtime/reflect/Accessor; (Accessor.java:213) at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.<init>(Lcom/sun/xml/bind/v2/runtime/JAXBContextImpl;Lcom/sun/xml/bind/v2/runtime/Transducer;Lcom/sun/xml/bind/v2/runtime/reflect/Accessor;)V (TransducedAccessor.java:195) : : at com.sun.xml.ws.client.WSServiceDelegate.getPort(Ljavax/xml/ namespace /QName;Ljava/lang/Class;[Ljavax/xml/ws/WebServiceFeature;)Ljava/lang/Object; (WSServiceDelegate.java:274) /QName;Ljava/lang/Class;[Ljavax/xml/ws/WebServiceFeature;)Ljava/lang/Object; (WSServiceDelegate.java:274) at com.sun.xml.ws.client.WSServiceDelegate.getPort(Ljavax/xml/ namespace /QName;Ljava/lang/Class;)Ljava/lang/Object; (WSServiceDelegate.java:267) /QName;Ljava/lang/Class;)Ljava/lang/Object; (WSServiceDelegate.java:267) 

从该堆栈跟踪中,我们能够确定该线程在尝试将xml转换为java对象时遇到了OutOfMemoryError。

显然没有为该应用程序分配足够的内存来处理大型XML有效负载。 因此,当将大型XML发送到此应用程序时,它开始抛出OutOfMemoryError。 当分配了足够的内存(即,增加-Xmx值)时,问题得到解决。 因此,在线程转储中查找“异常”或“错误”是确定问题根源的好模式。

但是在线程转储中查找异常或错误并不是一件容易的事。 因为线程转储往往包含数百或数千个线程。 每个线程将具有多行堆栈跟踪。 遍历堆栈跟踪的每一行以发现异常或错误是一个繁琐的过程。 线程转储分析工具在这里很方便。 您可能考虑使用免费的线程转储分析工具,例如: fastThread , IBM TDMA , Samurai …来分析应用程序线程转储。

将线程转储上载到fastThread应用程序时,它将生成根本原因分析报告。 此报告中的一节之一是“异常”。 在本节中,fastThread应用程序报告所有引发异常或错误的线程。 以下是本节的屏幕截图:

图:fastThread报告中的“异常”部分

您可能会注意到,本节报告了所有在堆栈跟踪中具有“异常”或“错误”的线程。 如果本节中报告了任何线程,则应考虑调查那些线程堆栈跟踪以确定问题的根源。

翻译自: https://www.javacodegeeks.com/2020/06/look-for-exceptions-errors-in-thread-dumps.html

jmc线程转储

jmc线程转储_查找线程转储中的异常和错误相关推荐

  1. Disruptor本地线程队列_实现线程间通信---线程间通信工作笔记001

    Disruptor本地线程队列_实现线程间通信---线程间通信工作笔记001 看到同事用这个东西了,这个挺好用的说是,可以实现,本地线程间的通信,好像在c++和java中都可以用 现在没时间研究啊,暂 ...

  2. go http 处理w.write 错误_Go语言中的异常和错误处理简介

    女主宣言 异常和错误处理在保证程序的鲁棒性方面起到了至关重要的作用.C++.Java.Python中的异常和错误处理都是比较类似的,可以用try-catch逻辑操作,但是Go中的异常处理却有别于以上三 ...

  3. Go语言中的异常和错误处理简介

    女主宣言 异常和错误处理在保证程序的鲁棒性方面起到了至关重要的作用.C++.Java.Python中的异常和错误处理都是比较类似的,可以用try-catch逻辑操作,但是Go中的异常处理却有别于以上三 ...

  4. PHP ERROR_php中的异常和错误浅析

    本文主要介绍了php中的异常和错误,分享给大家供大家参考学习,下面来一起看看详细的介绍: 一.异常与错误 异常是指程序运行中不符合预期情况以及与正常流程不同的状况.错误则属于自身问题,是一种非法语法或 ...

  5. php 错误 异常,php中的异常和错误解析

    PHP错误是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查甚至无法运行的情况.PHP异常一般是业务逻辑上出现的不合预期.与正常流程不同的状况,不是语法错误.本文介 ...

  6. java学习中,异常和错误的简介、捕获异常、抛出异常、自定义异常、finally关键字(java 学习中的小记录)

    java学习中,异常和错误的简介.捕获异常.抛出异常.自定义异常.finally关键字(java 学习中的小记录) 参考文章: (1)java学习中,异常和错误的简介.捕获异常.抛出异常.自定义异常. ...

  7. JAVA线程池_并发队列工作笔记0002---认识线程池_在线程池中使用队列

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上面是线程的执行周期 这个线程的生命周期,可以看到时间都浪费在了创建和销毁的这里了. 实际上执行业 ...

  8. 动态调整线程池_调整线程池的重要性

    动态调整线程池 无论您是否知道,您的Java Web应用程序很可能都使用线程池来处理传入的请求. 这是许多人忽略的实现细节,但是迟早您需要了解如何使用该池以及如何为您的应用程序正确调整池. 本文旨在说 ...

  9. java 线程耗尽_关于线程耗尽导致请求超时系统假死

    线程耗尽:我们知道java程序中,所有计算都是通过线程来执行的,同时我们为了能够重复利用线程,避免频繁创建线程而消耗资源,一般我们都使用线程池,既然是池,那就表明线程是有限的,既然是有限的就会有耗尽的 ...

最新文章

  1. Comparison of long-read sequencing technologies in the hybrid assembly of complex bacterial genomes
  2. 【重磅】Google元老Eric Schmidt发布《深度学习2020大综述》,深度学习集大成者
  3. Spring @SessionAttributes @ModelAttribute
  4. HJ29 字符串加解密
  5. Ctrl+Alt组合键在VMware虚拟机中如何使用
  6. c++中非静态函数不能用类名调用,为什么CWnd的成员函数GetDC()可以直接调用啊?
  7. 面试时如何介绍自己的项目经验
  8. 把结构用二进制方式写入文件,并读出来[转]
  9. 关于内核态和用户态切换开销的测试
  10. WAMPSERVER 启动后打开LOCALHOST是一张IIS7的图片的解决
  11. Halcon PDF文档(hdevelop_users_guide)学习总结之五——关于图形窗口
  12. 为什么只看重结果_买家下单最看重的三项服务,做好这三点,让你的销量涨涨涨...
  13. 关于android studio的配置记录
  14. 汽车倒车雷达系统的设计与实现(二)
  15. SSM房屋租赁系统,房屋合租系统 租房系统 SpringBoot租房系统
  16. LM358芯片中文资料(搬运)
  17. js html 导出excel文件,js 导出excel ,elsx格式
  18. React-native实现联系人列表分组组件(支持拼音搜索)
  19. 高德地图开发踩坑记录
  20. Camera-3A AE/AWB/AF

热门文章

  1. H - Prince and Princess 计蒜客 - 42402
  2. 1147 Heaps
  3. 牛客网【每日一题】5月15日题目 储物点的距离
  4. 数据结构之线段树合并——永无乡,Lomsat gelral,Tree Rotations,Tree Rotations Escape Through Leaf
  5. [2-sat专练]poj 3683,hdu 1814,hdu 1824,hdu 3622,hdu 4115,hdu 4421
  6. 洛谷P4219 大融合(LCT、虚子树)
  7. YbtOJ-连通的图【结论,线性基】
  8. P4245-[模板]任意模数多项式乘法
  9. P5952-[POI2018]水箱【最小生成树】
  10. 欢乐纪中某B组赛【2018.12.8】