JVM Crash by libjvm.so+0x48acf3

>>问题现象

环境: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和类之间用【,】隔开。
libjvm.soJava虚拟机(JVM)库文件,它负责加载和执行Java应用程序。然而,当系统上安装的JVM版本与libjvm.so文件不兼容时,就会出现"libjvm.so fail to load j9vm29"的错误。 这个错误可能发生在以下几种情况下: 1. JVM版本不匹配:libjvm.so文件需要与系统上的JVM版本兼容。如果libjvm.so文件是为JVM版本29(如j9vm29)编译的,而系统上安装的JVM版本与之不匹配,就会导致加载失败。 解决方法:确保系统上安装的JVM版本与libjvm.so文件兼容。可以尝试更新JVM版本或找到与libjvm.so文件兼容的JVM版本。 2. 缺少依赖库:libjvm.so文件可能依赖于其他库文件,如果这些库文件在系统中不存在或无法正确加载,也会导致加载失败。 解决方法:检查系统是否存在libjvm.so所依赖的所有库文件。确保这些库文件的路径正确,并且具有正确的权限。如果缺少某个库文件,可以尝试安装该库文件或更新相关软件包。 3. 文件损坏或丢失:libjvm.so文件本身可能损坏或丢失,无法正常加载。 解决方法:尝试从可信源重新获取libjvm.so文件,并替换系统中的该文件。确保替换的文件完整且无损坏。 总之,"libjvm.so fail to load j9vm29"错误表示libjvm.so文件无法加载JVM版本29。解决这个问题需要确保系统上安装的JVM版本与libjvm.so文件兼容,同时检查是否存在所有必需的依赖库文件,并确保libjvm.so文件本身没有损坏或丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值