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

java应用crash案例

 
阅读更多
最近,应用总会时不时crash(jdk6u24),hs_err_pid.log截取如下:
Current thread (0x0000000040124800):  GCTaskThread [stack: 0x0000000000000000,0x0000000000000000] [id=23997]
出错的时候运行的是GCTaskThread,说明是GC的时候出错的,执行的是libjvm.so 代码

R9 =0x00002b1fea3ea080
0x00002b1fea3ea080: <offset 0x9b9080> in /data/dynasty/jdk/jre/lib/amd64/server/libjvm.so at 0x00002b1fe9a31000
出错的代码段在libjvm.so 的偏移量0x9b9080位置(特别要注意这个偏移量,log中的其他内存地址都是不可比较的,只有偏移量,在同一版本的so库中,偏移量相同必然是表示的是同一代码)。多次crash都是这个偏移值。

Heap
par new generation   total 943744K, used 438097K [0x00000006f4000000, 0x0000000734000000, 0x0000000734000000)
  eden space 838912K,  50% used [0x00000006f4000000, 0x000000070ded3cf8, 0x0000000727340000)
  from space 104832K,  12% used [0x000000072d9a0000, 0x000000072e6a09d0, 0x0000000734000000)
  to   space 104832K,   0% used [0x0000000727340000, 0x0000000727340000, 0x000000072d9a0000)
concurrent mark-sweep generation total 3145728K, used 1573716K [0x0000000734000000, 0x00000007f4000000, 0x00000007f4000000)
concurrent-mark-sweep perm gen total 196608K, used 86517K [0x00000007f4000000, 0x0000000800000000, 0x0000000800000000)
内存一切正常,不是因为内存不足造成的.

代码也找不到任何问题,直到在网上搜到了一个jdk的bug:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7002666,理解为在一定情况下(GC时指针压缩),java本地类库中某段逻辑会引用错误的内存地址。这个bug在jdk6u25版本时修复了。
怀疑是这个问题导致,于是升级jdk版本至6u25,试用了一个多月,应用没有再无故crash。问题解决!

官网引用了一段代码,可验证此bug(要求环境为linux64位系统):
Java代码 复制代码 收藏代码
  1. static byte[] bb;   
  2. public static void main(String[] args) {   
  3.     bb = new byte[1024 * 1024];//这句的意义在于促进GC   
  4.     for (int i = 0; i < 25000; i++) {   
  5.         Object[] a = test(TestJdk024bug.classnew TestJdk024bug());   
  6.         if (a[0] != null) {   
  7.             // The element should be null but if it's not then   
  8.             // we've hit the bug.  This will most likely crash but   
  9.             // at least throw an exception.   
  10.             System.out.println("i = " + i);   
  11.             System.err.println(a[0]);   
  12.             throw new InternalError(a[0].toString());   
  13.   
  14.         }   
  15.     }   
  16.     System.out.println("end........");   
  17. }   
  18. public static Object[] test(Class c, Object o) {   
  19.     // allocate an array small enough to be trigger the bug   
  20.     Object[] a = (Object[])java.lang.reflect.Array.newInstance(c, 1);   
  21.     return a;   
  22. }  
    static byte[] bb;
    public static void main(String[] args) {
        bb = new byte[1024 * 1024];//这句的意义在于促进GC
        for (int i = 0; i < 25000; i++) {
            Object[] a = test(TestJdk024bug.class, new TestJdk024bug());
            if (a[0] != null) {
                // The element should be null but if it's not then
                // we've hit the bug.  This will most likely crash but
                // at least throw an exception.
                System.out.println("i = " + i);
                System.err.println(a[0]);
                throw new InternalError(a[0].toString());

            }
        }
        System.out.println("end........");
    }
    public static Object[] test(Class c, Object o) {
        // allocate an array small enough to be trigger the bug
        Object[] a = (Object[])java.lang.reflect.Array.newInstance(c, 1);
        return a;
    }

在多线程情况下跑,会出现a[0] != null为true的情况
我的启动参数是-server -Xms30M -Xmx30M -XX:NewSize=4m
分享到:
评论

相关推荐

    java线上故障分析-线程dump,堆内存分析

    在现代软件开发中,Java作为一门广泛使用的编程语言,在企业级应用、Web服务、大数据处理等多个领域发挥着重要作用。然而,随着系统复杂度的提升,线上环境中遇到的各种故障问题也日益增多。这些故障可能源于JVM自身...

    uml weekend crash course

    通过深入浅出的讲解和丰富的实践案例,本书不仅能够帮助读者构建坚实的UML理论基础,还能通过动手操作加深理解,最终达到熟练应用UML进行高效软件建模的目的。对于.NET、Ajax、ASP.NET、C#和Java等领域的开发人员而...

    Android应用源码百度统计例子-IT计算机-毕业设计.zip

    开发者通常使用Java或Kotlin语言编写Android应用,并使用Android Studio作为集成开发环境(IDE)。在这个毕业设计案例中,源码展示了如何构建一个完整的Android应用程序,包括UI设计、逻辑处理和与其他服务的交互。 ...

    android_crash

    在"android_crash"这个案例中,可能有一个自定义的日志标签,用于标记与崩溃相关的日志条目。 "android_crash-main"可能是一个项目主分支的命名,表示这是主要的代码仓库或者是处理主线程(UI线程)崩溃的部分。在...

    一个我自己学习Erlang的聊天室服务器及客户端代码

    Java的Socket API提供了丰富的功能,便于开发网络应用。 2. JSON或XML数据格式:为了与Erlang服务器进行数据交换,客户端可能使用JSON或XML作为数据序列化格式,这两种格式跨语言兼容性好,易于解析和生成。 3. 多...

    一个全局捕获 Crash 的库

    ### 四、实际应用案例 NeverCrash在实际应用中可以用于多种场景,例如: 1. **异常恢复**:当检测到特定类型的异常时,可以尝试自动恢复应用状态,避免用户失去数据。 2. **错误报告**:收集崩溃日志并上传服务器...

    程序员开发erlang的资料

    7. **Erlang实践**:从文件名erlang_practice.pdf来看,可能包含Erlang的实际应用案例和技巧,这些内容可以帮助读者更好地理解和运用Erlang。 8. **Erlang Battle**:erlbattle.pdf可能是一个关于Erlang编程竞赛或...

    藏经阁-2021技术人的百宝黑皮书-867.pdf

    客户端篇包括iOS性能检测新方法、淘宝客户端诊断体系升级、统一跨端API方案Uni API、Flutter在闲鱼的落地应用、Crash处理以及客户端测试策略等。 测试篇讨论了软件测试的基础知识、基于强化学习的质量AI、淘宝泛...

    使用HTML、CSS和JavaScript开发Android程序

    - 定义:使用特定平台的编程语言(如Java或Kotlin用于Android,Swift或Objective-C用于iOS)构建的应用程序。 - 特点:能够充分利用硬件资源,提供最佳用户体验。 - 缺点:开发周期较长,维护成本较高。 #### 2....

    React Native项目实战优化之路

    例如,由于是新出的技术,项目稳定性相比成熟的技术仍有不足,容易出现Crash,且在不同版本的Android和iOS设备上可能存在兼容性问题。特别是性能方面,在高端和低端设备上可能会表现出极大的差异性。 在React ...

    An Introduction to Python and Computer Programming

    #### 五、Python在电气工程中的应用案例 - **信号处理**: - 使用Python进行信号分析和处理,如傅立叶变换等。 - **图像识别**: - 应用Python进行图像处理和模式识别,如OpenCV库的使用。 - **电路仿真**: - ...

    网上绝无仅有的Log分析教程及例子.zip

    8. **Log在调试中的应用**:在项目说明文档中,可能会讲解如何通过Log进行调试,比如在遇到ANR(应用无响应)或Crash时,分析相关日志以定位问题所在,或者在优化性能时,监控关键操作的时间消耗。 9. **Log与...

    18堂超酷炫魔术教学视频课程【视频课程】下载整理.zip

    理解不同编程语言的语法,例如Python、C++、Java等,以及版本控制工具如Git对于源代码管理至关重要。 3. **计算机资料**:这部分可能包含计算机科学的基本概念、操作系统原理、网络知识、硬件架构等内容。了解这些...

    AndroidStudy_android_studio_crazy_android_notes

    《疯狂Android讲义》是一本深受开发者欢迎的Android学习书籍,第二版更是涵盖了大量更新的知识点和实战案例。在这个名为"AndroidStudy_android_studio_crazy_android_notes"的压缩包文件中,作者按照书中的示例代码...

    WebLogic Server 故障诊断

    文章首先简要介绍了故障诊断的基本流程,随后深入讲解了 Thread Dump 的概念及其在故障诊断中的应用,最后列举了一些常见的问题及相应的解决策略。 ### 故障诊断的模式 故障诊断是一个系统的、有条不紊的过程,其...

    人工智能清单.docx

    15. **Machine Learning Crash Course by Google**:包括视频讲座、案例研究和实践练习的快速机器学习课程。 16. **Python Class by Google**:针对有一定编程基础的学习者,提供Python编程课程。 17. **Deep ...

Global site tag (gtag.js) - Google Analytics