IBM WebSphere Javacore分析

2023-05-16

今天公司的服务器宕机了,抛出很多的javacore 文件,这个文件比较好分析,下面我们讲一下什么是javacore ,以及如何通过分析javaCore文件找出问题。

参考 http://zhangzhiqiangli.blog.163.com/blog/static/459183842012715111949106/

一、什么是Javacore?

Javacore是Java应用程序在某一时间的文本表示形式,也可理解为Java Dump(通常称为Thread Dump)的线程转储文件。该文件记录了整个JVM的运行情况,包含线程、垃圾回收、JVM运行参数、内存地址等信息。JVM的许多问题都可以用这个文件进行诊断,其中比较典型的包括线程阻塞、CPU使用率过高、JVM Crash、堆内存不足和类装载等问题。

Javacore文件通常以*.txt方式显示,名称格式主要是以Javacore为头,加上日期号、产生的时间号、当时的线程编号,如: Javacore.20100719.003424.299228.txt.

我们可以通过以下几种方式获取Javacore:

1. 向操作系统发送一个中止的signal

http://blog.csdn.net/happyqwz/article/details/8255762

2. 在Java的执行代码中使用JavaDump()方法

com.ibm.jvm.Dump.JavaDump() 方法促使JVM dump

发布ProblemDiagnosticsLabToolkit应用包,通过可视化页面直接生成相关文件。

3. 系统在异常时自动抛出

? 一个严重的本地调用出错(非Java的异常)

? JVM堆的大小被使用完了

? OutOfMemory 错误

二、Javacore描述了什么内容?

在Javacore文件的帮助下,我们就可以更好地分析系统运行情况,在系统出现死锁,或者内部错误、中间件等问题时,我们都可以通过Javacore进一步深入分析。我们可以在Javacore文件里找到以下相关信息:

? JVM的参数启动参数、Jdk版本

? JVM堆大小

? JVM产生原因、产生时间(可手动获取,可系统抛出)

? 全局垃圾回收次数、分配失败次数、内存溢出时,最后一次详细的垃圾回收记录

? JVM堆内存地址信息

? JVM中,所有线程执行情况(包含应用程序内部执行线程,容器线程,垃圾回收线程,定时线程,线程池线程,页面请求转发线程等多种线程信息)

? 已装载入JVM中的类的信息

如下表:

 

序号

描述

例子

1

? JAVA产生的原因

? 产生时间

? 产生的线程号

? JDK版本

? JVM堆大小

? 空间堆大小

? 已分配的堆大小

2

JVM堆对象占用比例信息

 

3

整体线程的状态,各占比例情况

 

4

主要线程类型与其线程数,及在整个容器中所占用的比例

 

5

其他相关信息

……

三、如何分析Javacore?

我们可以通过Javacore提供的信息对JVM进行一个全面的分析,除了了解垃圾回收情况、JVM相关配置信息外,分析重点可放在线程执行情况上,分析哪些线程在等待,哪些在执行,以便快速缩小问题范围。

(打开Javacore文件,庞大的字符串使得我们查找信息十分不便,此时我们可以利用IBM Thread and Monitor Dump Analyzer for Java工具分析,该工具可以让我们清晰的分析Javacore文件)。

在IBM Thread and Monitor Dump Analyzer for Java工具中,请求线程可分为以下几种状态:

? 死锁,Deadlock(重点关注)

? 执行中,Runnable(重点关注)

? 等待资源,Waiting on condition(重点关注)

? 等待监控器检查资源,Waiting on monitor

? 暂停,Suspended

? 对象等待中,Object.wait()

? 阻塞,Blocked(重点关注)

? 停止,Parked

在整个分析过程中,我们需要根据问题分析线程的运行的情况(如该Javacore是什么时候生成的,是内存溢出,还是系统繁忙时),查看不同状态的线程的执行堆栈,分析堆栈找到其中属于系统应用的代码可进一步缩小问题点(在版本稳定的中间件里,我们分析问题一般先从应用代码入手,了解是哪些业务代码触发了问题)。我们要了解线程状态具体的意思,线程中的堆栈代码,整个容器的各个类型线程的情况,结合这些信息进行深入的分析。

ü Deadlock:死锁线程,一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。

ü Runnable:一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,有可能正在传递SQL到数据库执行,有可能在对某个文件操作,有可能进行数据类型等转换。

ü Waiting on condition:等待资源,如果堆栈信息明确是应用代码,则证明该线程正在等待资源,一般是大量读取某资源,且该资源采用了资源锁的情况下,线程进入等待状态,等待资源的读取。又或者,正在等待其他线程的执行等。

ü Blocked:线程阻塞,是指当前线程执行过程中,所需要的资源长时间等待却一直未能获取到,被容器的线程管理器标识为阻塞状态,可以理解为等待资源超时的线程。这种情况在was的日志中,一般可以看到CPU饥渴,或者某线程已执行了XX秒的信息。

在了解了以上线程状态的具体意思后,我们就可以结合这些信息更进一步分析线程问题。

在内存溢出时,分析Javacore文件中的线程内容,可以采用自下而上的分析方法。首先查看有多少线程被设置了Blocked状态,这些线程是在执行什么请求,并且到了堆栈最后一步在等待什么资源,将其分类记录下来;查找到这些Blocked线程等待的执行线程编号,在Javacore中,继续查找该线程,分析其堆栈与状态与监控器的记录的信息。一般这些线程会处于Waiting on condition状态,因为这些线程也是因为资源迟迟未获取到或者执行时间过长一直处于等待状体,进一步导致队列中其他需要访问这些资源的线程都被设置为Blocked状态。在找到线程后,我们就可以初步将问题缩小到哪些业务应用请求存在问题,是哪一个类与哪一行代码,其等待的资源是什么。结合这些信息详细分析业务代码,或者根据这些问题到IBM网站中,查找对应版本的中间件是否存在同样的问题,如有,则可以考虑打补丁升级。

一个Javacore描述的是在一个时间片段中的JVM的运行情况,这些信息相对来说是有限的,为了更进一步分析与定位问题,我们可以采集连续多个时间片段的Javacore,如间隔30秒或者几分钟的Javacore。分别对这些Javacore进行分析,以求更加清晰JVM在该时间段内的运行情况,或者出现阻塞问题的线程及其相关线程的的执行情况,从而准确定位问题。

在整个性能优化过程中,学会如何分析Javacore是十分关键的一步。通过切面,对JVM中所运行的线程及堆栈进行全面分析,可以让我们顺利而有方向性地开展性能调优工作,并使优化工作更加简单快捷。

 

然后采用jca分析工具,我采用的是jca401的版本,进入dos环境,执行:

java -Xmx200m -jar jca401.jar

会打开图形界面,调入javacore文件,进行分析发现有线程处于blocked状态,点击toolbar中的“Thread Detail”图标,能够看到具体的线程状态及明细,定位blocked的线程,查看明细,本例中发现该线程blocked by一个QuartzScheduler线程,该线程的调用堆栈如下:

而且还发现大量waiting on condition

都是quartz在等待。基本确定是定时器除了问题。

最后发现是定时器的配置文件没改,无法连接到数据库,而且设置的超时时间过长。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IBM WebSphere Javacore分析 的相关文章

随机推荐

  • CAN通信讲解(2)——数据帧和遥控帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 2 1 帧的种类2 2 数据帧和遥控帧2 3 仲裁过程2 4 各段详解2 5 小结 数据帧和遥控帧格式类似 xff0c 放在一起串讲 2 1 帧的种类 CAN协议帧分
  • 通过UDP广播自动获取IP地址

    有时服务端地址是不固定的 xff0c 需要自动获取 xff1b 此时就可以通过UDP广播来方便地实现 xff1a 客户端 xff0c 发送广播来获取地址 xff1a SOCKET sSrv sockaddr in addrto WSADAT
  • CAN通信讲解(3)——错误据帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 3 1 总线错误的种类3 1 1 位错误3 1 2 ACK错误3 1 3 填充错误3 1 4 CRC错误3 1 5 格式错误 3 2 错误帧结构3 3 错误状态3 3
  • CAN通信讲解——总目录

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 总目录 CAN通信讲解 xff08 1 xff09 基本知识 CAN通信讲解 xff08 2 xff09 数据帧和遥控帧 CAN通信讲解 xff08 3 xff09 错误据
  • CAN通信讲解(4)——过载帧、帧间隔

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 小节目录 4 1 过载帧4 1 1 过载加粗样式帧的目的4 1 2 过载帧格式4 1 3 过载帧的发送时机 4 2 帧间隔 gt gt 返回总目录 4 1 过载帧 4 1
  • IIC 关于时钟拉伸问题 clock stretch

    转载请标明出处 时钟拉伸 Clock stretching clock stretching通过将SCL线拉低来暂停一个传输 直到释放SCL线为高电平 传输才继续进行 clock stretching是可选的 实际上大多数从设备不包括SCL
  • python绘图之图例的添加和坐标轴的移动大法【转】

    转自 xff1a https blog csdn net lishangyin88 article details 80260957 1 图例的添加 python view plain copy import pandas as pd im
  • Python代码转换为exe可执行程序详解【转】

    转自 xff1a https blog csdn net woshisangsang article details 73230433 一 xff0c 简介 Python写完程序 xff0c 要靠命令来执行太LOW xff0c 太低调了 x
  • ISO 26262 ASIL安全等级,怎样划分和分解【转】

    转自 xff1a https baijiahao baidu com s id 61 1587221359036864459 amp wfr 61 spider amp for 61 pc 对原文进行归纳整理 1 什么是ASIL安全等级 A
  • 关于PkI里签名证书和加密证书(俗称双证书)

    众所周知 xff0c 数字证书包含签名证书和加密证书 xff0c 签名证书用于签名和验证 xff0c 加密证书用于加密和解密 xff0c 我因为不明白为什么要使用双证书 xff0c 所以找寻相关资料查询了一下 xff0c 下面这篇文章是关于
  • 各类加密以及摘要算法密钥以及结果长度

    A0B923820DCC509A MD5 16 16 C4CA4238A0B923820DCC509A6F75849B MD5 32 32 356a192b7913b04c54574d18c28d46e6395428ab SHA1 40 6
  • 三架马车: 微服务、消息队列和定时任务

    这里所说的三架马车是指微服务 消息队列和定时任务 如下图所示 xff0c 这里是一个三驾马车共同驱动的一个立体的互联网项目的架构 不管项目是大是小 xff0c 这个架构模板的形态一旦定型了之后就不太会变 xff0c 区别只是我们有更多的服务
  • 内与外的困惑:找出System进程占用100%CPU的元凶

    来源 xff1a http blog cfan com cn html 64 51964 32697 html 我的系统文件 内外兼修 PS xff1a 发表于Cfan第17期 xff0c 这是完整原文 xff0c 上杂志时由于版面空间之限
  • 里程碑图、横道图、项目进度网络图比较

    选择网络图而不是横道图的情形显示活动间依赖关系时选择里程碑图而不是横道图的情形向高层或客户报告关键的外部接口选择横道图而不是网络图哦情形为了跟进项目的进展 xff0c 想管理层和团队成员报告项目进展情况时
  • iframe跨域与session失效问题的解决办法

    何为跨域跨域session cookie xff1f 也就是第三方session cookie 第一方session cookie指的是访客当前访问的网站给访客的浏览器设置的seesion cookie 会被存储在访客的计算机上 第三方se
  • url 编码(percentcode 百分号编码)

    http www imkevinyang com 2009 08 E8 AF A6 E8 A7 A3javascript E4 B8 AD E7 9A 84url E7 BC 96 E8 A7 A3 E7 A0 81 html 摘要 本文主
  • 用oracle函数判断字符串中是否包含中文

    我们知道在数据库中 xff0c 汉字占用两个字节 xff0c 而其他字符占用一个字节 xff0c 这样通过两个函数的比较就可以判断出是否有中文 xff0c length计算字符长度 xff0c lengthb计算字节长度 xff1b sel
  • 下载文件设置header的filename要用ISO8859-1编码的原因

    很多情况下 xff0c 我们在写程序的时候都会把代码设置为UTF 8的编码 xff0c 可以在下载文件设置filename的时候却有违常理 xff0c 竟然设置编码格式为ISO8859 1 xff0c 代码如下 xff08 如是英文的话就不
  • response.setContentType 可以设置的值

    Sets the Content Type header Content Type identifies the MIME type of the response document and the character set encodi
  • IBM WebSphere Javacore分析

    今天公司的服务器宕机了 xff0c 抛出很多的javacore 文件 xff0c 这个文件比较好分析 xff0c 下面我们讲一下什么是javacore xff0c 以及如何通过分析javaCore文件找出问题 参考 http zhangzh