- 浏览: 1559508 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
nich002:
原网站失效了。撸主简单粗暴的复制过来,可读性极差!差评!
Apache配置详解(最好的APACHE配置教程) -
107x:
不错,谢谢!
LINUX下查看文件夹下的文件个数! -
Hypereo:
好你妹,连个格式都没有!
Apache配置详解(最好的APACHE配置教程) -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子 -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子
参考:
http://www.ibm.com/developerworks/cn/aix/library/0806_chench_core/index.html
http://www.cn-java.com/www1/?uid-45-action-viewspace-itemid-4410
如果是Java进程不知道什么原因退出或被杀死,想要分析具体原因,一般来说分下面几步: 1 拿到Java应用程序的日志文件。 2 查找JVM的致命错误日志 3 查找操作系统的core dump文件 4使用Dtrace查找“是谁杀死了Java进程” proc:::signal-send 如何运行(1125)是进程号 Java的应用有时候会因为各种原因Crash,这时候会产生一个类似java_errorpid.log的错误日志。可以拿到了这个日志,怎样分析Crash的原因呢?下面我们来详细讨论如何分析java_errorpid.log的错误日志。 二.产生错误的原因造成严重错误的原因有多种可能性。Java虚拟机自身的Bug是原因之一,但是这种可能不是很大。在绝大多数情况下,是由于系统的库文件、API或第三方的库文件造成的;系统资源的短缺也有可能造成这种严重的错误。在发生了Crash之后,如果无法定位根本原因,也应该迅速找到Work Around的方法。 三.对日志文件的分析首先要检查日志的文件头:例如,下面是从一个客户发过来的错误日志的文件头 它说明Crash的时候,JVM正在从哪个库文件执行代码。除了“V”以外,还有可能是“C”、“j”、“v”、“J”。具体的表示意思如下: 文件头之后,是当前线程的DUMP信息,线程之后是JVM进程的DUMP信息,包括所有线程的状态、地址和ID。最后还有JVM状态,Heap状态,动态连接库等等的信息。这些烦乱的信息中,包含有非常有用的信息。下面我们根据几个具体的实例来分析Java虚拟机Crash的典型例子。 四.内存回收引起的Crash内存回收引起的Crash有以下的特点:在日志文件头一般有“ EXCEPTION_ACCESS _VIOLATION”和“# Problematic frame: # V [jvm.dll+....”的信息,意味着这是在JVM内部处理,而且多半是JVM的Bug。对于这类问题,最快的方法就是绕过它。 Stack: [0x03cf0000,0x03d30000), sp=0x03d2fc18, free space=255k VM_Operation (0x063efbac): full generation collection, mode: safepoint, requested by thread 0x040f83f8 可以清楚的看到JVM正在做 “full generation collection”。另外还有可能看到,其他的回收行为: generation collection for allocation 对于内存回收的错误,一般采取改变回收的算法和参数的方法来绕过去。例如,来自客户的日志除了上面的日志信息,在日志中Heap信息中还能发现一些其他信息: 上面的信息能看出在Crash的时候,JVM的PermSize空间几乎已经消耗完了,并且回收算法在压缩Perm空间的时候出了错。因此,建议改变内存回收的算法,或扩大PermSize和MaxPermSize的数值。 五.栈溢出引起的CrashJava代码引起的栈溢出,通常不会引起JVM的Crash,而是抛出一个Java异常:java.lang.StackOverflowError。但是在Java虚拟机中,Java的代码和本地C或C++代码公用相同的Stack。这样,在执行本地代码所造成的栈溢出,就有可能引起JVM的Crash了。 在上面的信息中,可以发现这是个栈溢出的错误。并且当前栈剩余的空间已经很小了(free space =4k)。因此建议将JVM的Stack的尺寸调大,主要设计两个参数:“-Xss” 和“-XX:StackShadowPages=n”。但是,将栈的尺寸调大,也意味着在有限的内存资源中,能打开的最大线程数会减少。
一般来说日志文件中会有很应用相关的错误信息。Java进程异常退出的原因最有可能就是应用程序本身的问题。因此检查Java应用程序的日志文件可能是最快定位到错误的方法。
如果应用程序日志文件中没有发现什么线索。那么还可以查看 JVM的致命错误日志。有些致命的错误,比如JNI或虚拟机本身产生的错误,可能使得Java应用程序来不及写日志就退出了。这时候可以查一个以 "hs_err_pid" 开头的日志名,例如hs_err_pid1125.log,其中1125是进程号。这个文件中也记录了一些宝贵的信息来提供一些线索,特别是Java自身的一些Bug。这个文件一般为于当前的工作目录中。用户可以用find命令自己搜索到。
作为被操作系统所调度的进程,Java进程也会在不同的信号下产生Core Dump文件,例如Sig_ill和Seg_segv。这些非常严重的错误的确会使得Java虚拟机根本来不及产生任何日志就宕了。拿到core dump文件就可以使用很多工具来分析具体原因了,例如jmap, jstack等等都可以友好的进行Java进程的Core文件的分析。一般来说,Core文件也放到进程的当前工作目录,用户可以用find命令搜索 “core”。另外可以用coreadm来预先指定core文件存放的地方以及文件名的格式,例如:coreadm -g /var/core/core.%f.%p.%t
但是,有很多情况,进程被杀死的原因很复杂。有可能被别的进程以外杀掉,或被一些脚本不小心kill掉,或者被管理员(或入侵者kill -9)处理掉。这些情况都不会产生日志文件和core dump文件。这些情况很难跟踪。但如果是Solaris10下,可以使用下面的Dtrace脚本来确定“是谁杀死了Java进程”
#!/usr/sbin/dtrace -qs
/args[1]->pr_pid == $1/
{
printf("%s(pid:%d) is sending signal %d to %s"n", execname, pid, args[2],args[1]->pr_fname);
}
$ ./sig1.d 1125
sched(pid:0) is sending signal 24 to bc
sched(pid:0) is sending signal 24 to bc
bash(pid:3987) is sending signal 15 to bc
bash(pid:3987) is sending signal 15 to bc
bash(pid:3987) is sendg signal 9 to bc
一. 如何得到这个日志文件如果有一个严重的错误引起Java进程非正常退出,我们叫Crash,这时候会产生一个日志文件。缺省情况下,这个文件会产生在工作目录下。但是,可以在Java启动参数通过下面的设置,来改变这个文件的位置和命名规则。例如:
java -XX:ErrorFile=/var/log/java/java_error_%p.log
就将这个错误文件放在/var/log/java下,并且以java_error_pid.log的形式出现。
-------------------------------------
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0815e87e, pid=7268, tid=4360
#
# Java VM: Java HotSpot(TM) Server VM (1.4.2_13-b06 mixed mode)
# Problematic frame:
# V [jvm.dll+0x15e87e]
#
--------------------------------------
文件头中有很多有用的信息,“EXCEPTION_ACCESS_VIOLATION ”意味着Java应用Crash的时候,正在运行JVM自己的代码,而不是外部的Java代码或其他类库代码。这种情况很可能是JVM的Bug,但是也不一定。除了“EXCEPTION_ACCESS_VIOLATION ”,还有可能是别的信息,例如“SIGSEGV(0xb)”,意味着JVM正在执行本地或JNI的代码;“EXCEPTION_STACK_OVERFLOW”意味着这是个栈溢出的错误。
另外一个有用的信息就是:
# Problematic frame:
# V [jvm.dll+0x15e87e]
FrameType Description:
C: Native C frame
j: Interpreted Java frame
V: VMframe
v: VMgenerated stub frame
J: Other frame types, including compiled Java frames
另外,在Thread的DUMP信息最后,还能看到有关内存回收的行为例如:
--------------- T H R E A D ---------------
Current thread (0x00a56668): VMThread [id=4360]
siginfo: ExceptionCode=0xc0000005, reading address 0x00000057
Registers:
........
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x15e87e]
------------------------------------------------------------
full generation collection
parallel gc failed allocation
parallel gc failed permanent allocation
parallel gc system gc
--------------------------------------------------------------
Heap
def new generation total 22592K, used 19530K [0x10010000, 0x11890000, 0x138f0000)
eden space 20096K, 97% used [0x10010000, 0x11322bd8, 0x113b0000)
from space 2496K, 0% used [0x113b0000, 0x113b0000, 0x11620000)
to space 2496K, 0% used [0x11620000, 0x11620000, 0x11890000)
tenured generation total 190696K, used 100019K [0x138f0000, 0x1f32a000, 0x30010000)
the space 190696K, 52% used [0x138f0000, 0x19a9cf38, 0x19a9d000, 0x1f32a000)
compacting perm gen total 38656K, used 38588K [0x30010000, 0x325d0000, 0x34010000)
the space 38656K, 99% used [0x30010000, 0x325bf038, 0x325bf200, 0x325d0000)
----------------------------------------------------------------
栈溢出引起的Crash会在日志的文件头中看到“EXCEPTION_STACK_OVERFLOW”字样。另外,在当前线程的Stack信息中也能发现一些信息。例如下面的例子:
-----------------------------------------------------------------------------------
发表评论
-
JVM问题追查与调优
2012-03-27 14:44 1112JDK的几种分析工具 http://liudaoru ... -
NodeJs相关资料
2011-08-18 14:55 2945NodeJs获取参数: proces ... -
jprofiler追踪问题
2011-08-12 18:20 1012Jprofiler下载页: http://www.ej ... -
Linux服务器性能评估与优化【z】
2011-07-01 10:05 1514来自:http://www.itlearner.com/ ... -
Java 理论与实践: 非阻塞算法简介【z】
2011-03-26 20:39 1242From: http://www.ibm.com/develo ... -
Berkeley DB相关
2010-09-25 22:17 1024为什么要使用Berkeley DB,它适合什么场合应用?Ber ... -
熟悉系统方法总结
2010-07-06 14:26 789了解一个陌生的系统是我们经常碰到的事情,下面总结一下自己的一些 ... -
Java缓存框架 EhCache
2010-07-06 14:09 4693From: http://www.oschina.net/p/ ... -
【nio】使用 ServerSocketChannel 实现的 File 服务器[z]
2010-05-21 17:31 3924From: http://www.java2000.net/p ... -
Memcached命令行管理
2010-03-15 11:18 4456From: http://www.exp2up.com/2 ... -
(转)Resin服务器配置指南
2010-01-21 15:35 3413From:http://blog.21cn.com/super ... -
Flickr架构
2010-01-11 09:52 1245From: http://www.cyask.com/ques ... -
JDK的几种分析工具
2009-12-04 12:13 10873From: http://blog.csdn.net/hant ... -
XMemcached——一个新的开源Java memcached客户端
2009-10-23 09:27 1863From: http://www.infoq.com/cn/ ... -
多线程任务调度学习
2009-10-16 13:58 2267昨天找到一套多线程任务调度的代码,相当的不错,先把思路总结一下 ... -
用HSCALE实现MySQL的数据分布式存储
2009-10-15 12:47 2981From:http://www.ningoo.net/ht ... -
马化腾:搜索、电子商务硬仗一定要坚持打
2009-10-15 12:09 1690From:http://www.techweb.com.c ... -
MySQL分表实现上百万上千万记录分布存储的批量查询设计模式【z】
2009-10-15 09:56 3141From:http://hi.baidu.com/jabber ... -
nginx负载均衡和lvs负载均衡的比较分析【z】
2009-10-13 20:02 1430From:http://www.shouker.com/u ... -
新型的大型bbs架构(squid+nginx)【z】
2009-10-13 19:53 1586From:http://www.fovweb.com/opti ...
相关推荐
如何分析JAVA crash 为什么程序会Crash? 什么是异常? 如何分析JAVA Crash 程序执行时发生了无法处理的异常 崩溃分为 Java Crash 和 Native Crash
App研发录—架构设计,Crash分析和竞品技术分析App研发录—架构设计,Crash分析和竞品技术分析App研发录—架构设计,Crash分析和竞品技术分析App研发录—架构设计,Crash分析和竞品技术分析App研发录—架构设计,Crash...
本篇文章主要介绍了jvm crash的崩溃日志详细分析及注意点。具有很好的参考价值,下面跟着小编一起来看下吧
Java开发的SHELL CRaSH.7z
"Java Crash Course" contains a multitude of tips and tricks, examples and exercises you can do to grow your Java programming skills to unprecedented levels. We chose the content of this book carefully...
Crash问题分析,总结objdump使用方式
软件是人思维的产物。智者千虑,必有一失,人的思维总有缺陷,反映到软件层面上就是程序 bug。...通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。
崩溃转储分析 Java Crash Dump 分析演示的示例代码
qualcomm平台system dump分析工具,使用方法crash64 vmlinux DDRCS0.BIN@加载地址,DDRCS1.BIN@加载地址 --kaslr auto
Java Crash Course - The Complete Beginner's Course to Learn Java Programming in 21 Clear-Cut Lessons Paperback – December 20, 2016 Are you bored of the traditional methods people tell you to use to ...
iOS系统Crash文件分析方法参考.pdf
一个linux下面分析Android崩溃日志(crash log)的工具。把崩溃的日志信息(带I/DEBUG标记)复制到xx文件中,用编辑器编辑工具中Android编译的符号(symbol)所在的位置,我的是在309行"SYMBOLS_DIR = './out/target/...
使用该工具可分析hpux系统崩溃后遗留的crash文件夹,并生成可查看的的文档,以方便确定宕机的原因
虚拟机问题分析 crash文件分析 性能调优
藏经阁-美团 crash 监控分析系统优化之路:crash 率从千分位到万分位.pdf
iOS开发中奔溃是非常恶心,但是我们如何能够做到Crash分析以及收集处理,恰恰体现了一个高质量iOS开发人员的能力!今晚Cooci老师从原理探索分析Crash的收集和处理,让APP起死回生!知识点:1-常见奔溃简析 2-...
crash, Java平台的shell ______. ~ ~. |`````````,. '.. . '''' | || |'''|'''''. ''```.. '' |_________|| | `.. ' `.. . ' | | `.___
NULL 博文链接:https://myspace1916.iteye.com/blog/1441465
Linux Crash Dump分析工具的设计与实现.pdf
Oracle 11GR2 RAC节点crash故障分析