`
lxy2330
  • 浏览: 469203 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个java crash的故障分析过程

 
阅读更多
 

一个应用在周五出现java进程消失,没有任何日志。先查看/var/log/message中无oom_killer信息,所以只能拿core。

该应用是一个集群,通知他们将出现crash的服务器上打开ulimit,等待生成core文件 。

今天周一,下午应用负责人紧急找我,说同时出几台crash了。开了ulimit参数的那台服务器coredump已经生成。

登录到该服务器上,先是gdb $JAVA_HOME/bin/java coredump_file

gdb) thread 1
[Switching to thread 1 (process 6838)]#0 0x00002aaab6cc75cd in Java_java_net_SocketOutputStream_socketWrite0 ()
from /usr/alibaba/install/jdk1.6.0_25/jre/lib/amd64/libnet.so
(gdb) bt
#0 0x00002aaab6cc75cd in Java_java_net_SocketOutputStream_socketWrite0 () from /usr/alibaba/install/jdk1.6.0_25/jre/lib/amd64/libnet.so
#1 0x00002aaaab041b0c in ?? ()
#2 0x0000000000000000 in ?? ()
(gdb)

因为JVM本身没有符号,短时间内看不出有用的信息。只知道process 6838在Java_java_net_SocketOutputStream_socketWrite0时退出,立即进入JAVA进程内部跟踪:

jstack $JAVA_HOME/bin/java coredump_file > a.txt

vi a.txt

找到 Thread 6838: (state = IN_NATIVE)
- java.net.SocketOutputStream.socketWrite0(java.io.FileDescriptor, byte[], int,
int) @bci=0 (Interpreted frame)

查看该线程的调用栈,一看吓了一跳,竟然有1600多行,其中有十多行代码重复了140多次,不用说,这段调用陷入了死循环。

查看该死循环的代码主要是velocity代码在rander一个模板,所以怀疑95%的可能是模板循环引用引起的,因为我不了解应用的具体实现,通知应该方查看信息提示的

模板调用,果然几分钟他们就发现了模板嵌套导致的死循环。

从拿到core到问题定位基本在五分钟内。所以即使看起来无踪可循的故障,只要获取关键信息,基本还是能反映问题的本质的。

 

分享到:
评论

相关推荐

    JAVA编写故障树分析软件

    在Java中,可以使用类来表示这些元素,例如定义一个`Event`类来存储事件信息,一个`Gate`类来代表逻辑门(AND、OR等),以及一个`FaultTree`类来维护整个故障树结构。 五、布尔逻辑处理 故障树中的逻辑关系主要基于...

    java平台故障分析与诊断

    在IT行业中,Java平台故障分析与诊断是一项至关重要的技能,特别是在大型企业级应用的运维过程中。这个主题涵盖了许多方面,包括但不限于日志分析、性能监控、堆栈跟踪、内存泄漏检测以及异常处理。以下是对这一主题...

    动态故障树最小割序集求解java代码

    3. CutsetView.java:Cutset是故障树分析中的一个重要概念,表示导致系统故障的一组最小事件。CutsetView可能是一个用户界面组件,用于显示和交互操作计算出的最小割集。 4. equation.java:这个文件可能包含处理...

    javacore分析工具

    `jca412.jar`可能是一个包含Java Core Analysis工具的库文件,用于解析和展示JavaCore日志文件。这种工具通常会提供图形界面或命令行选项,便于用户查看和理解分析结果。 `jca.properties.xml`可能包含了Java Core ...

    Java线上故障排查方案.pdf

    Arthas是一个Java诊断工具,它可以直接attach到运行中的Java进程上,帮助开发者获取方法调用的统计数据、实时查看JVM状态、分析线程情况等。 在进行故障排查时,GC监控(GC Monitoring)是不可或缺的一步。GC监控...

    Java异常故障模式分析.pdf

    Java 异常故障模式分析 Java 异常处理机制是 Java 语言的重要特征之一。正确使用异常处理机制可以使程序的设计更加安全、可靠,但如果使用不当,則会让程序变得复杂难懂,从而影响程序效率。本文对 Java 异常处理...

    基于JAVA的软件故障自动检测系统设计.pdf

    这些特征量是故障分析与诊断的基础,它们的准确性和相关性直接影响了故障诊断的最终效果。 最后,故障专家系统诊断模块在专家系统的框架内进行故障识别和智能诊断。智能诊断能够基于学习到的故障知识库与以往的故障...

    故障树_故障树_

    通过上述步骤,我们可以用Java开发一个自定义的故障树分析工具,对系统进行深入的风险评估,以提高其可靠性和安全性。故障树分析不仅应用于IT行业,还在航空航天、电力系统、化工、核能等多个领域中有着广泛的应用。

    IBM WebSphere JavaCore分析工具

    9. **自动化分析**:通过脚本化或API接口,用户可以自动化分析过程,节省大量手动检查的时间。 10. **最佳实践和指导**:优秀的分析工具往往附带最佳实践和指南,帮助用户更好地理解和使用JavaCore文件。 `readme....

    java线程分析工具TDA

    Java线程分析是Java开发中的重要环节,尤其是在处理性能优化、死锁排查或者并发问题时。TDA(Thread Dump Analyzer)是一款强大的Java线程分析工具,它能够帮助开发者深入理解应用在运行时的线程状态,包括线程的...

    简单的蓝屏分析器(用JAVA写的)

    本项目是一个用Java编写的简单蓝屏分析器,旨在帮助用户理解蓝屏的原因,并提供可能的解决策略。 首先,我们需要理解蓝屏出现的基本原因。蓝屏通常由硬件故障、驱动程序错误、系统内部冲突或恶意软件引起。当系统...

    Java线上故障排查方案(2).pdf

    整个排查流程,从问题定位到分析和解决,都是一个逐步深入的过程,需要工程师们具备扎实的技术基础和丰富的实战经验。通过本文档提供的排查方案和知识点,可以更好地应对和解决Java线上出现的各种故障。

    crash-dump-analysis:Java Crash Dump 分析演示的示例代码

    总结来说,"crash-dump-analysis"项目提供的示例代码是一个学习和实践Java Crash Dump分析的良好资源,它涵盖了从基础理论到实际工具使用的各个方面,对于提升Java开发者的问题诊断能力具有重要价值。通过深入研究并...

    java应用故障诊断工具预研,基于开源项目bistoury修改.zip

    Java应用程序在运行过程中可能会遇到各种故障,如性能下降、内存泄漏、线程死锁等问题,这时就需要使用专门的故障诊断工具来定位问题。本项目基于开源项目Bistoury进行了修改,旨在提升Java应用的故障诊断效率。下面...

    weblogic定期故障分析

    ### WebLogic定期故障分析 #### 关键知识点梳理与解析 **一、背景介绍** WebLogic作为一款广泛应用的企业级中间件,常被部署于关键业务场景之中。然而,在实际运行过程中,偶尔会出现性能瓶颈甚至宕机的情况。...

    IBM WEBSPHERE javacore分析工具jca

    当WebSphere遇到问题时,如内存溢出或应用程序故障,我们可以生成一个名为“javacore”的文件。javacore是Java虚拟机(JVM)在特定时刻的一个快照,包含了JVM的状态信息,如线程堆栈、内存分配、系统属性等。通过...

    Java线上故障排查方案.rar

    2. VisualVM:一个强大的JDK自带工具,提供CPU、内存、线程、类加载等全方位监控。 3. JConsole:类似VisualVM,可用于实时监控Java应用的性能和资源消耗。 4. GC日志分析:通过JVM参数设置,收集Garbage Collection...

    javacore分析工具jca36

    JavaCore分析工具JCA36是一款专为Java开发者设计的强大性能分析工具,它提供了一个直观的图形用户界面(GUI),帮助开发者深入理解Java应用程序的运行状况。通过使用JCA36,用户可以轻松地捕获和分析Java虚拟机(JVM...

    java问题性能测试分析流程.doc

    本文档参考了多份专业文献和技术文档,包括但不限于Oracle官方Java性能优化指南、JVM性能调优实践等,旨在提供一个全面而实用的性能测试分析流程。 2. 性能分析流程 2.1. 概述 性能分析通常包括以下步骤:设定测试...

Global site tag (gtag.js) - Google Analytics