`
lxy2330
  • 浏览: 459780 次
  • 性别: 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核心技术系列)@

    本书摒弃了传统的以解读枯燥的Java虚拟机规范文档和分析繁琐的Java虚拟机源代码的方式来讲解Java虚拟机,取而代之的是,以实践的方式,引导读者如何从零开始构建和实现一个Java虚拟机,整个过程不仅能让读者做到对...

    基于Java的车辆故障维修管理系统设计与实现毕业设计(含论文)

    本系统开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与车辆故障维修管理系统的实际需求相结合,确定了Java开发车辆故障维修管理系统的使用。 关键字:车辆故障维修管理系统;Java;MySQL

    java-jsp学生宿舍故障报修管理信息系统计算机毕业设计程序.zip

    采用java技术构建的一个管理系统。整个开发过程首先对系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计...

    java-JSP网络故障管理平台(源代码+外文翻译+论文)

    该系统是设计一个基于Web的校园网故障管理平台,以实现对用户申报的故障信息的录入,故障处理单的派发,处理情况的记录以及对故障信息和派单完成情况的统计。 在设计时综合考虑本系统的特性以及应用环境的特点,决定...

    基于JAVA JSP网络故障管理平台的毕业设计,B/S体系结构,Access,基于Web的故障管理平台的各个模块的处理方法和代码

    为了使整个开发过程条理化、有序化,提高了开发效率,通过系统功能的详细分析,将系统分为两大子系统:用户管理子系统,完成用户的添加、权限设置、用户信息修改;故障管理子系统,完成故障的录入、故障信息的查询、...

    Java课程设计--个人通讯录管理系统方案.doc

    考 文 献22 附 录22 使用说明书22 引 言 1 1.1课程设计选题 《个人通讯录管理系统》 2 1.2课程设计的目的 通过编写并调试一个Java应用软件,熟悉和掌握使用Java开发应用程序的完整过程。 使学生巩固和加深以Java语言...

    基于Java的车辆故障维修管理系统设计与实现源码.zip

    提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速...

    怎么使用java设计开发纠错冗余信息管理系统,附带实例说明.zip

    以下是一个示例,展示如何使用Java设计和开发纠错冗余信息管理系统: 假设我们正在为一个大型制造公司开发一个纠错冗余信息管理系统。该系统需要支持以下功能: 收集和处理各种类型的生产数据,包括温度、压力、...

    Java毕业设计-JAVA本地监听与远程端口扫描(源代码+论文).rar

    本项目为一款基于Java实现的本地监听与远程端口扫描系统,旨在帮助用户了解网络连接状态、检测潜在安全威胁以及进行网络故障排查。通过该系统,用户可以方便地监控本地计算机的端口活动,同时扫描远程计算机的开放...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    前 言 致 谢 第一部分 走近Java 第1章 走近Java / 2 1.1 概述 / 2 1.2 Java技术体系 / 3 1.3 Java发展史 / 5 1.4 展望Java技术的未来 / 9 1.4.1 模块化 / 9 1.4.2 混合语言 / 9 1.4.3 多核并行 / 11 ...

    java虚拟机知识点整理

    缺点:效率问题,标记和清除两个过程效率都不高,另一个是清除之后会产生大量不连续的内存碎片,以后分配较大对象内存时,无法分配连续的大空间内存。 2 复制算法:将可用内存分为2块,每次使用A块,当A内存用完了...

    Java虚拟机

    第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译,这对理解本书后面内容有重要帮助。第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出...

    基于java的-557-实验室计算机故障报修系统-源码.zip

    提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速...

Global site tag (gtag.js) - Google Analytics