JVM崩溃问题分析

jni调用.dll的时候,经常碰见这类问题,于是在网上查了相关的资料,但最终也没有找到最合理的解释,就整理一些思路:

      1、 修改jvm的内存大小,非常频繁的输出大量的Log到控制台上JVM的处理有问题(也怀疑本身频繁的输出大量的Log到文件中JVM的处理有问题)。(每1秒钟就输出170k的Log)。

      2、造成严重错误的原因有多种可能性。Java虚拟机自身的Bug是原因之一,但是这种可能不是很大。在绝大多数情况下,是由于系统的库文件、API或第三方 的库文件造成的;系统资源的短缺也有可能造成这种严重的错误。在发生了Crash之后,如果无法定位根本原因,也应该迅速找到Work Around的方法。

      3、对日志文件的分析,文件头中有很多有用的信息,“EXCEPTION_ACCESS_VIOLATION ”意味着Java应用Crash的时候,正在运行JVM自己的代码,而不是外部的Java代码或其他类库代码。这种情况很可能是JVM的Bug,但是也不 一定。除了“EXCEPTION_ACCESS_VIOLATION ”,还有可能是别的信息,例如“SIGSEGV(0xb)”,意味着JVM正在执行本地或JNI的代 码;“EXCEPTION_STACK_OVERFLOW”意味着这是个栈溢出的错误。
      JVM崩溃问题分析

      4、内存回收引起的Crash内存回收引起的Crash有以下的特点:在日志文件头一般有“ EXCEPTION_ACCESS _VIOLATION”和“# Problematic frame: # V [jvm.dll+....”的信息,意味着这是在JVM内部处理,而且多半是JVM的Bug。对于这类问题,最快的方法就是绕过它。另外,在Thread的DUMP信息最后,还能看到有关内存回收的行为。

      5、栈溢出引起的Crash,Java代码引起的栈溢出,通常不会引起JVM的Crash,而是抛出一个Java异 常:java.lang.StackOverflowError。但是在Java虚拟机中,Java的代码和本地C或C++代码公用相同的Stack。这 样,在执行本地代码所造成的栈溢出,就有可能引起JVM的Crash了。

      6、动态编译引起的Crash。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值