`

JVM致命错误-退出

 
阅读更多

jvm 致命错误退出,生成hs_err_pid.log文件中:

 

 

---------------  T H R E A D  ---------------

Current thread (0x00007f47400d1800):  JavaThread "C2 CompilerThread3" daemon [_thread_in_native, id=49108, stack(0x00007f47262c2000,0x00007f47263c3000)]

Stack: [0x00007f47262c2000,0x00007f47263c3000],  sp=0x00007f47263bd2f0,  free space=1004k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x8196f4]  PhaseIdealLoop::build_loop_late_post(Node*)+0x144
V  [libjvm.so+0x819cac]  PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)+0x13c
V  [libjvm.so+0x81c8c5]  PhaseIdealLoop::build_and_optimize(bool, bool)+0x835
V  [libjvm.so+0x4a294f]  Compile::Optimize()+0x73f
V  [libjvm.so+0x4a5879]  Compile::Compile(ciEnv*, C2Compiler*, ciMethod*, int, bool, bool, bool)+0x13c9
V  [libjvm.so+0x3f2615]  C2Compiler::compile_method(ciEnv*, ciMethod*, int)+0x1f5
V  [libjvm.so+0x4afeaa]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0xc9a
V  [libjvm.so+0x4b0e56]  CompileBroker::compiler_thread_loop()+0x5d6
V  [libjvm.so+0xa75543]  JavaThread::thread_main_inner()+0x103
V  [libjvm.so+0xa7568c]  JavaThread::run()+0x11c
V  [libjvm.so+0x926268]  java_start(Thread*)+0x108
C  [libpthread.so.0+0x7df3]  start_thread+0xc3


Current CompileTask:
C2:5995393 13330 % !   4       com.app.data.test.Tester::run @ 126 (219 bytes)

 

 

说明 jit编译线程(C2 CompilerThread3)  执行异常,导至jvm退出。 

方法:不让jvm 编译这个类或升级jvm

不让jvm 编译这个类:

   增加参数JVM:+XX:CompileCommand=exclude,com/app/data/test/Tester,run

                           (XX:CompileCommand=exclude,包路径,方法名)

   也可以写通配符:+XX:CompileCommand=exclude,com/app/data/test/T*,c*

 

配置完成后,可以在测试环境验证一下,jvm不对其编译,方法是:

 使用jvm参数:  -XX:+PrintCompilation -XX:+CITime, 可以在控制台打印出jvm jit编译情况

比如:java -XX:+PrintCompilation -XX:+CITime -XX:CompileCommand=exclude,com/app/data/test/Tester,run -cp ../libs/*:*.jar com.app.Startup

日志中:

### Excluding compile: com.app.data.test.Tester::run

 

说明该类被排除了,不编译

 

 

 另外: CompilerThread 也会导至cpu利用率升高

 

  -XX:CompileCommand说明:转自(http://blog.csdn.net/ning0323/article/details/75451955 

 

参数:-XX:CompileCommand
含义:
Specifies a command to perform on a method. 
该参数用于定制编译需求,比如过滤某个方法不做JIT编译
若未指定方法描述符,则对全部同名方法执行命令操作,具体如何指定见下文[举例]
可使用星号通配符(*)指定类或方法,具体如何使用见下文[举例]
该参数可多次指定,或使用 换行符(\n)分隔参数后的多个命令
解析完该命令后,JIT编译器会读取.hotspot_compiler文件中的命令,该参数也可写在.hotspot_compiler文件中
可使用-XX:CompileCommandFile指定.hotspot_compiler文件为其他文件
用法:
-XX:CompileCommand=command,method[,option]
命令:
exclude,跳过编译指定的方法
compileonly,只编译指定的方法
inline/dontinline,设置是否内联指定方法
print,打印生成的汇编代码
break,JVM以debug模式运行时,在方法编译开始处设置断点
quiet,不打印在此命令之后、通过-XX:CompileCommand指定的编译选项
log,记录指定方法的编译日志,若未指定,则记录所有方法的编译日志
其他命令,option,help
举例:
1. 设置编译器跳过编译com.jvmpocket.Dummy类test方法的4种写法
-XX:CompileCommand=exclude,com/jvmpocket/Dummy.test
-XX:CompileCommand=exclude,com/jvmpocket/Dummy::test
-XX:CompileCommand=exclude,com.jvmpocket.Dummy::test
-XX:CompileCommand="exclude com/jvmpocket/Dummy test"
2. 设置编译器只跳过编译java.lang.String类int indexOf(String)方法
-XX:CompileCommand="exclude,java/lang/String.indexOf,(Ljava/lang/String;)I"
3. 设置编译器跳过编译所有类的indexOf方法
-XX:CompileCommand=exclude,*.indexOf

 

分享到:
评论

相关推荐

    java troubleshooting guide for HP-UX.pdf

    - **功能**:用于处理Java虚拟机(JVM)中发生的不可恢复的致命错误。 - **应用场景**:当JVM遇到某些严重错误(如内存溢出)时,会触发此类错误。使用这些工具可以记录错误信息,便于后续分析。 ###### 1.1.4 ...

    记录一次Java爆掉之后的日志

    在Java中,`hs_err_pid*.log`是JVM(Java虚拟机)在遇到致命错误或异常退出时自动生成的错误报告文件。这个文件非常关键,因为它提供了崩溃时的堆栈跟踪,系统配置信息,以及可能的故障原因。例如,它可能会指出是...

    HotSpot Runtime概述

    **VM致命错误处理**是在遇到无法恢复的错误时,VM如何优雅地关闭并报告错误信息。 **引用**机制涉及软引用、弱引用、虚引用等,用于内存管理和对象生命周期的控制。 **进一步阅读**资源可以帮助开发者深入理解这些...

    Java第6章完整.pptx

    不可恢复性错误是指硬件故障、网络通讯中断等致命性错误,程序只能选择退出。可处理的异常是指输入/输出错误、算术运算错误等由于程序设计失误造成的错误,应用程序可以对这些异常进行适当的处理。 3. 异常的处理...

    第2讲 Exception和Error有什么区别1

    而对于Error,由于它们通常是致命的,因此处理方式通常更注重日志记录和快速退出,以便于调试和修复。 在Java语言中,还有一些高级异常处理特性,如: - **Try-with-resources**: 自Java 7开始引入,用于自动关闭...

    Android全面面试题带答案

    `RuntimeException`是一种常见的异常类型,它代表那些在运行时发生的非致命性错误。 **关键知识点详解:** - **选项abcd** 指出了以下几种异常均属于`RuntimeException`: - **ArithmeticException**:算术运算...

    基于JavaCore文件的深入分析

    1. 当Java程序遇到致命错误但仍然可以继续运行时。 2. 当Java进程因严重问题而终止时,JVM会在退出前生成这两个文件以保留程序状态。 JavaCore文件的内容包括每个线程的执行栈信息,表现为stack trace的形式。通过...

Global site tag (gtag.js) - Google Analytics