jmc线程转储

本文是我们的线程转储分析系列的第4部分,它将为您提供什么是IBM VM的JVM线程转储以及您将找到的不同线程和数据点的概述。 您将看到和学习​​到,IBM VM Thread Dump格式是不同的,但是提供了更多现成的故障排除数据。

在这一点上,您应该知道线程如何与Java EE容器交互以及什么是线程转储。 在深入探究分析模式之前,您还需要了解IBM VM Thread Dump格式,因为这是在IBM VM上使用IBM WAS时期望的典型Thread Dump数据。

IBM VM线程转储故障概述

为了使您更好地理解,请在下面的图表中向您显示IBM 1.6 VM线程转储及其常见数据点的可视分类:

您可以从HotSpot VM线程转储中找到其他多余的运行时数据。 请记住,您可能不需要检查所有这些数据点,但是您仍然需要了解根据问题情况可用的数据。 本文的其余部分将更详细地介绍每个线程转储部分。

#线程转储生成事件

第一部分为您提供有关如何生成此线程转储的详细信息。 IBM Thread Dump可以由“信号3”或“用户”生成,例如kill -3 <Java pid>,也可以由严重的JVM条件(例如OutOfMemoryError)自动生成。

0SECTION       TITLE subcomponent dump routineNULL           ===============================1TISIGINFO     Dump Event "user" (00004000) received 1TIDATETIME    Date:                 2012/03/12 at 20:52:131TIFILENAME    Javacore filename:    /apps/wl11g/domains/app/javacore.20120312.205205.1949928.0004.txt1TIREQFLAGS    Request Flags: 0x81 (exclusive+preempt)1TIPREPSTATE   Prep State: 0x4 (exclusive_vm_access)0SECTION       TITLE subcomponent dump routineNULL           ===============================1TISIGINFO     OUTOFMEMORY received 1TIDATETIME    Date:                 2012/06/01 at 09:52:121TIFILENAME    Javacore filename:    /usr/WebSphere/AppServer/javacore311328.1338524532.txt

#硬件和操作系统环境详细信息

下一部分为您提供了有关此IBM VM所运行的当前硬件和操作系统的一些详细信息:

0SECTION       GPINFO subcomponent dump routineNULL           ================================2XHOSLEVEL     OS Level         : AIX 5.32XHCPUS        Processors -3XHCPUARCH       Architecture   : ppc643XHNUMCPUS       How Many       : 63XHNUMASUP       NUMA is either not supported or has been disabled by user

#JRE详细信息和Java启动参数

本节非常有用,因为它为您提供了有关JRE主版本和补丁程序级别以及所有JVM启动参数的完整视图。

0SECTION       ENVINFO subcomponent dump routineNULL           =================================1CIJAVAVERSION JRE 1.6.0 IBM J9 2.4 AIX ppc64-64 build jvmap6460sr9-20101124_692951CIVMVERSION   VM build 20101124_0692951CIJITVERSION  JIT enabled, AOT enabled - r9_20101028_17488ifx21CIGCVERSION   GC - 20101027_AA1CIRUNNINGAS   Running as a standalone JVM…………………………………………………………………………………………

#用户和环境变量

本节为您提供了当前用户和环境变量的列表,例如文件描述符限制。

1CIUSERLIMITS  User Limits (in bytes except for NOFILE and NPROC)NULL           ------------------------------------------------------------------------NULL           type                            soft limit           hard limit2CIUSERLIMIT   RLIMIT_AS                        unlimited            unlimited2CIUSERLIMIT   RLIMIT_CORE                     1073741312            unlimited2CIUSERLIMIT   RLIMIT_CPU                       unlimited            unlimited2CIUSERLIMIT   RLIMIT_DATA                      unlimited            unlimited2CIUSERLIMIT   RLIMIT_FSIZE                     unlimited            unlimited2CIUSERLIMIT   RLIMIT_NOFILE                         4096                 40962CIUSERLIMIT   RLIMIT_RSS                        33554432            unlimited2CIUSERLIMIT   RLIMIT_STACK                      33554432           4294967296

#Java堆详细信息和GC历史记录

与HotSpot VM 1.6+相似,IBM VM线程转储还包含有关Java堆容量和利用率的信息,以及为Java进程的每个内存空间分配的内存段。

请记住,更深入的Java Heap分析将需要您按照以下教程分析Heap Dump二进制快照。 http://javaeesupportpatterns.blogspot.com/2011/02/ibm-sdk-heap-dump-httpsession-footprint.html

最后,还介绍了垃圾回收过程的历史。

0SECTION       MEMINFO subcomponent dump routineNULL           =================================1STHEAPFREE    Bytes of Heap Space Free: 51104BC8 1STHEAPALLOC   Bytes of Heap Space Allocated: 800000001STSEGTYPE     Internal Memory…………………………………………………………………………………………1STSEGTYPE     Object Memory…………………………………………………………………………………………1STSEGTYPE     Class Memory…………………………………………………………………………………………1STSEGTYPE     JIT Code Cache…………………………………………………………………………………………1STSEGTYPE     JIT Data Cache…………………………………………………………………………………………STGCHTYPE     GC History  3STHSTTYPE     00:52:07:523048405 GMT j9mm.51 -   SystemGC end:
newspace=466136480/483183616 oldspace=899251600/1610612736 loa=80530432/80530432 3STHSTTYPE     00:52:07:523046694 GMT j9mm.139 -   Reference count end: weak=40149
soft=87504 phantom=33 threshold=17 maxThreshold=32 3STHSTTYPE     00:52:07:522164027 GMT j9mm.91 -   GlobalGC end: workstackoverflow=0
overflowcount=0 weakrefs=40149 soft=87504 threshold=17 phantom=33 finalizers=4947
newspace=466136480/483183616 oldspace=899251600/1610612736 loa=80530432/80530432 3STHSTTYPE     00:52:07:522152764 GMT j9mm.90 -   GlobalGC collect complete

#Java和JVM对象监视器的锁和死锁详细信息

此线程转储部分非常重要。 线程问题经常涉及线程由于特定对象监视器上的锁而在彼此之间等待,例如线程B等待获取线程A持有的对象监视器上的锁。死锁条件还可以不时触发;例如, 特别是对于非线程安全的实现。

IBM VM线程转储提供了一个单独的部分,您可以在其中分析每个线程持有的锁,包括等待链,例如,许多线程正在等待获取同一对象监视器锁。

0SECTION       LOCKS subcomponent dump routineNULL           ===============================NULL           1LKPOOLINFO    Monitor pool info:2LKPOOLTOTAL     Current total number of monitors: 1034NULL           1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors):2LKMONINUSE      sys_mon_t:0x0000000115B53060 infl_mon_t: 0x0000000115B530A0:3LKMONOBJECT       java/util/Timer$TimerImpl@0x0700000000C92AA0/0x0700000000C92AB8: <unowned>3LKNOTIFYQ            Waiting to be notified:3LKWAITNOTIFY            "Thread-7" (0x0000000114CAB400)…………………………………………………………………………## Threads waiting chain2LKMONINUSE      sys_mon_t:0x000000012462FE00 infl_mon_t: 0x000000012462FE40:3LKMONOBJECT       com/inc/server/app/Request@0x07000000142ADF30/0x07000000142ADF48: owner "Thread-30" (0x000000012537F300), entry count 13LKNOTIFYQ            Waiting to be notified:3LKWAITNOTIFY            "Thread-26" (0x0000000125221F00)3LKWAITNOTIFY            "Thread-27" (0x0000000125252000)3LKWAITNOTIFY            "Thread-28" (0x000000012527B800)3LKWAITNOTIFY            "Thread-29" (0x00000001252DDA00)3LKWAITNOTIFY            "Thread-31" (0x0000000125386200)3LKWAITNOTIFY            "Thread-32" (0x0000000125423600)3LKWAITNOTIFY            "Thread-33" (0x000000012548C500)3LKWAITNOTIFY            "Thread-34" (0x00000001255D6000)3LKWAITNOTIFY            "Thread-35" (0x00000001255F7900)…………………………………………………………………………

#Java EE中间件,第三方和自定义应用程序线程

与HotSpot VM线程转储格式相似,此部分是线程转储的核心,通常您将在其中花费大部分分析时间。 找到的线程数将取决于您使用的中间件软件,第三方库(可能具有自己的线程)和您的应用程序( 如果创建任何自定义线程,通常不是最佳实践 )。

在下面的示例中,以下线程处于BLOCK状态,这通常意味着它正在等待获取对象监视器上的锁。 您将需要在前面的部分中进行搜索,并确定哪个线程持有该锁,以便您可以查明根本原因。

3XMTHREADINFO      "[STUCK] ExecuteThread: '162' for queue: 'weblogic.kernel.Default
(self-tuning)'" J9VMThread:0x000000013ACF0800, j9thread_t:0x000000013AC88B20,
java/lang/Thread:0x070000001F945798, state:B, prio=13XMTHREADINFO1            (native thread ID:0x1AD0F3, native priority:0x1, native
policy:UNKNOWN)3XMTHREADINFO3           Java callstack:4XESTACKTRACE                at org/springframework/jms/connection/SingleConnectionFactory.createConnection(SingleConnectionFactory.java:207(Compiled Code))4XESTACKTRACE                at org/springframework/jms/connection/SingleConnectionFactory.createQueueConnection(SingleConnectionFactory.java:222(Compiled Code))4XESTACKTRACE                at org/springframework/jms/core
/JmsTemplate102.createConnection(JmsTemplate102.java:169(Compiled Code))4XESTACKTRACE                at org/springframework/jms/core
/JmsTemplate.execute(JmsTemplate.java:418(Compiled Code))4XESTACKTRACE                at org/springframework/jms
/core/JmsTemplate.send(JmsTemplate.java:475(Compiled Code))4XESTACKTRACE                at org/springframework/jms
/core/JmsTemplate.send(JmsTemplate.java:467(Compiled Code))…………………………………………………………………………………………………………

#JVM类加载器摘要

最后,IBM VM Thread Dump的最后一部分为您提供了详细的类加载器摘要。 在处理与Class Loader相关的问题和泄漏时,这是非常关键的数据。 您将在运行的JVM中找到每个活动Class loader的已加载Class的数量和类型。

我建议您阅读以下案例研究,以获取有关如何在使用IBM VM时查明此类问题的根本原因的完整教程。
http://javaeesupportpatterns.blogspot.com/2011/04/class-loader-memory-leak-debugging.html

0SECTION       CLASSES subcomponent dump routineNULL           =================================1CLTEXTCLLOS        Classloader summaries1CLTEXTCLLSS               12345678: 1=primordial,2=extension,3=shareable
,4=middleware,5=system,6=trusted,7=application,8=delegating2CLTEXTCLLOADER            p---st-- Loader *System*(0x0700000000878898)3CLNMBRLOADEDLIB           Number of loaded libraries 63CLNMBRLOADEDCL                  Number of loaded classes 37212CLTEXTCLLOADER            -x--st-- Loader sun/misc
/Launcher$ExtClassLoader(0x0700000000AE8F40), Parent *none*(0x0000000000000000)3CLNMBRLOADEDLIB           Number of loaded libraries 03CLNMBRLOADEDCL                  Number of loaded classes 912CLTEXTCLLOADER            -----ta- Loader sun/misc/Launcher$AppClassLoader(0x07000000008786D0)
, Parent sun/misc/Launcher$ExtClassLoader(0x0700000000AE8F40)3CLNMBRLOADEDLIB           Number of loaded libraries 33CLNMBRLOADEDCL                  Number of loaded classes 15178……………………………………………………………………………………………

我希望本文有助于理解IBM VM线程转储的基本视图。 下一篇文章(第5部分)将通过一步一步的教程和我在过去十年中使用的技术为您提供有关如何分析JVM线程转储的教程。

参考: 如何分析线程转储–第4部分: Java EE支持模式和Java教程博客上的JCG合作伙伴 Pierre-Hugues Charbonneau提供的IBM VM 。

翻译自: https://www.javacodegeeks.com/2012/06/how-to-analyze-thread-dump-ibm-vm.html

jmc线程转储

jmc线程转储_如何分析线程转储– IBM VM相关推荐

  1. java 线程转储_获取Java线程转储的常用方法(推荐)

    1. 线程转储简介 线程转储(Thread Dump)就是JVM中所有线程状态信息的一次快照. 线程转储一般使用文本格式, 可以将其保存到文本文件中, 然后人工查看和分析, 或者使用工具/API自动分 ...

  2. java 线程开销_多线程的线程开销

    多线程中两个必要的开销:线程的创建.上下文切换 创建线程: 创建线程使用是直接向系统申请资源的,对操作系统来说,创建一个线程的代价是十分昂贵的, 需要给它分配内存.列入调度,同时在线程切换的时候还要执 ...

  3. 应用退出前不让线程切换_用户级线程和内核级线程,你分清楚了吗?

    前天晚上有个伙伴私信我说在学进程和线程,问我有没有好的方法和学习教程,刚好我最近也在备相关的课. 班上不少学生学的还是很不错的.拿班上小白和小明的例子吧(艺名哈).小明接受能力很强,小白则稍差些. 关 ...

  4. java timer 线程安全_多线程之 线程安全与控制

    线程控制 wait和notify方法需要注意的细节:wait方法与notify方法必须要由同一个锁对象调用.因为:对应的锁对象可以通过notify唤醒使用同一个锁对 象调用的wait方法后的线程. w ...

  5. c++ 等待子线程结束_?进程、线程、以及它们之间的区别与联系

    一.进程简介 1.1 进程概念的引入 计算机中,CPU是最宝贵的资源,为了提高CPU的利用率,引入了多道程序设计的概念.当内存中多个程序存在时,如果不对人们熟悉的"程序"的概念加以 ...

  6. fork/join和线程池_从fork-join /线程池调用的Singelton bean中的访问spring请求范围缓存...

    fork/join和线程池 问题: 启用了Spring且其范围设置为Request的缓存需要由不在请求范围内的singleton bean访问. 解: Spring使您能够创建缓存,该缓存为请求范围保 ...

  7. java线程提交_从Java线程到线程池

    线程模型 线程模型分为两类,用户级线程(ULT)和内核级线程(KLT) 用户级线程(ULT):user level threads,系统内核对ULT无感知,线程的创建和调度都由用户级APP进程管理:即 ...

  8. JAVA线程池_并发队列工作笔记0003---线程池的分类_可缓存线程池_定长线程池_定时线程池_单例线程池

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这里说线程池的分类 有可缓存类型, 定长类型, 定时类型, 单例类型, 这里我这次用Executo ...

  9. c++ 等待子线程结束_进程和线程

    1.进程的基本概念 进程简单说就是运行中的可执行文件.代码经过编译后生成二进制可执行文件,当运行该可执行文件时,代码被装载到内存中,然后CPU会执行程序中的指令. 有关进程调度,例如进程A,进程B,C ...

最新文章

  1. 分析智能卡的ATR格式【转】
  2. [再寄小读者之数学篇](2014-05-30 有限无界函数)
  3. 私.Modbus测试_ZC01_TCP方式
  4. 手写tomcat socket closed_【消费电子】:重在阅读,新增手写 BOOX Nova Pro 体验评测...
  5. mcd opc读取数据 西门子数控nx_西门子TIA+PLCSIM+MCD,构建自动化仿真系统
  6. SQOOP对分隔符支持情况的验证
  7. 蓝天采集系统的安装和遇到的问题及解决方案
  8. CCF201712-1 最小差值(100分)【序列处理】
  9. min-max容斥【概念+例题解析】
  10. linux 目录防篡改,Linux下的防篡改技巧
  11. js常用的正则匹配(一般不用修改)
  12. 电子血压仪器小程序开发制作
  13. 算法实现将输入的英语句子反过来输出
  14. 要闻:2016胡润百富榜昨天发布 宝能姚振华从炸油条到千亿身家“大黑马”
  15. 2018前端面试题 css 部分
  16. 温酒读Qt:QObject中篇1—— Q_OBJECT的隐秘角落
  17. JavaWeb-仿小米商场(8) 订单支付[沙箱支付]
  18. Dataset之CASIA-WebFace:CASIA-WebFace 数据集的简介、安装、使用方法之详细攻略
  19. 树莓派使用硬件加速视频转码
  20. android ui框架详解,多图详解 “Android UI”设计官方教程(二)

热门文章

  1. 抖音上非常火的旋转图快速部署
  2. 【Ajax】创建并封装
  3. Hibernate中使用Criteria查询及注解——(hibernate.cfg.xml)
  4. Mybatis中连接池介绍
  5. html session 登录页面跳转页面跳转页面,session失效后跳转到登陆页面
  6. 微信小程序父级之间的传值_微信小程序自定义组件封装及父子间组件传值的方法...
  7. 本地方法(JNI)——访问数组元素+错误处理
  8. 优先队列——二项队列(binominal queue)
  9. java集合——遗留的集合
  10. 托管 非托管_如何在托管Kubernetes上还原Neo4J备份