欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JVM Crash by libjvm.so+0x48acf3 jvmJavaApusic 

程序员文章站 2022-07-03 13:27:19
...
>>问题现象

环境:NeoShine Linux+Jdk 1.5.0_17+Apusic 403

JVM crash掉,产生hs_err_pid<pid>.log文件。

>>日志情况

主要日志信息如下:

JVM crash main information:

1.JVM:(1.5.0_17-b04 mixed mode)

A fatal error has been detected by the Java Runtime Environment: 

2.SIGSEGV (0xb) 

3.libjvm.so+0x48acf3 

4.Java Threads: ( => current thread )

  ComiplerThread [_thread_in_native]

5.Current CompileTask:

com.apusic.net.Muxer.acceptConnection(SocketAdaptor paramSocketAdaptor)

6.Heap的使用情况正常。

>>问题分析

通过最近两次的JVM crash的日志来看,此两次的日志信息是一样的,都是因为JavaThread的CompilerThread[_thread_in_native]堵塞引起,而Heap的使用情况正常。

经查看JVM的配置参数发现,多了一个JPDA的参数,如下:

"-Xdebug -Xrunjdwp:server=y,suspend=n,transport=dt_socket,address=6888"

在Apusic的Normal启动方式中多添加了:JPDA参数,而且开发商是以normal方式启动的,此参数应该在debug模式下使用,而不要在normal和product模式下使用。

此问题也有可能是JDK的一个bug。

>>解决方案

通过参阅sun网站上的问题报告及相关资料,提出如下解决方法:

1、 删掉JVM中的JPDA参数,即删掉:

"-Xdebug -Xrunjdwp:server=y,suspend=n,transport=dt_socket,address=6888"

2、 在JVM的启动参数中加上:

-XX:-EliminateLocks

解决jdk1.5.0_17的一个bug。

并且将GC的策略由原来的CMS调整为如下:(以下为主要参数)

-server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:MaxNewSize=384M -XX:NewSize=384M -XX:SurvivorRatio=8 -Xss512K -XX:+UseParallelGC -XX:ParallelGCThreads=8 -XX:+ParallelRefProcEnabled -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError

3、 对OS和Apusic进行再优化:

3.1、Apusic范围的OS方面配置如下:

ulimit -n 65535

ulimit -s 20480

3.2、Apusic线程池调优及KeepAlive参数调整:

HttpHandler

MuxHandler

KeepAlive

-Dcom.apusic.net.bio=true

建议:以nohup和生产模式启动Apusic。

参见:sun 官网:http://www.oracle.com/technetwork/java/javase/crashes-137240.html#gbyzu

4.1.4 Crash in the HotSpot Compiler Thread

Tips:排除某些类方法的编译,可以配置如下JVM参数:

-XX:CompileCommand=exclude,com/apusic/net/Muxer.acceptConnection

注意:类是包全路径,标识符之间用【/】隔开,而类名和方法点用英文句号【.】隔开,动作exclude和类之间用【,】隔开。

【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:

JVM Crash by libjvm.so+0x48acf3
            
    
    
        jvmJavaApusic 
相关标签: jvm Java Apusic