有没有办法解决这种错误报告:
似乎唯一会导致崩溃的事情是高内存使用,大约30GB左右,尽管这并不总是这种情况(有些崩溃时gc日志显示内存使用较低)。在
似乎很难制作任何简单的“可重现代码”来复制在复杂应用程序的生产环境中发生的错误。
该怎么办?虽然我已经在Oracle崩溃网站上报告了一堆这样的问题...
我不怀疑硬件内存问题,因为除了Java之外,没有其他东西会崩溃。而且应用程序中没有自定义本机JNI代码。
我们的VM参数是
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fc955e66998, pid=25851, tid=140467030525696
#
# JRE version: 6.0_37-b06
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20.12-b01 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# J java.util.LinkedHashMap.addEntry(ILjava/lang/Object;Ljava/lang/Object;I)V
崩溃很频繁(在Web服务器生产中每天1-2次),几乎总是有不同的问题帧报告。
以下是一些错误报告的示例:
# J java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.addConditionWaiter()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
# J java.util.LinkedHashMap.addEntry(ILjava/lang/Object;Ljava/lang/Object;I)V
# C [libc.so.6+0x6bb34]
# C [libgobject-2.0.so.0+0x2346f] g_type_check_instance_is_a+0x43
# C [libgobject-2.0.so.0+0x2346f] g_type_check_instance_is_a+0x43
# V [libjvm.so+0x4d3360]
# V [libjvm.so+0x32d166] CardTableRS::write_ref_field_gc_par(void*, oopDesc*)+0x26
# V [libjvm.so+0x7a33e2] ContiguousSpace::prepare_for_compaction(CompactPoint*)+0x242
# V [libjvm.so+0x4d3360]
# V [libjvm.so+0x76943b] ReferenceProcessor::balance_queues(DiscoveredList*)+0x32b
# V [libjvm.so+0x4d3360]
# V [libjvm.so+0x32d166] CardTableRS::write_ref_field_gc_par(void*, oopDesc*)+0x26
# V [libjvm.so+0x4d3360]
# V [libjvm.so+0x4d3360]
# V [libjvm.so+0x76943b] ReferenceProcessor::balance_queues(DiscoveredList*)+0x32b
似乎唯一会导致崩溃的事情是高内存使用,大约30GB左右,尽管这并不总是这种情况(有些崩溃时gc日志显示内存使用较低)。在
-Xint
模式下运行时不会发生崩溃,但该模式太慢了,不是一个选项。似乎很难制作任何简单的“可重现代码”来复制在复杂应用程序的生产环境中发生的错误。
该怎么办?虽然我已经在Oracle崩溃网站上报告了一堆这样的问题...
我不怀疑硬件内存问题,因为除了Java之外,没有其他东西会崩溃。而且应用程序中没有自定义本机JNI代码。
我们的VM参数是
-server -Xss4096k -Xms32255M -Xmx32255M -Xnoclassgc -XX:+UseNUMA -XX:MaxPermSize=512m -XX:+UseGCOverheadLimit -verbose:gc -Xmaxf1 -XX:+UseCompressedOops -XX:+DisableExplicitGC -XX:+AggressiveOpts -XX:+ScavengeBeforeFullGC -XX:CMSFullGCsBeforeCompaction=10 -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:+CMSParallelRemarkEnabled -XX:+ParallelRefProcEnabled -XX:GCTimeRatio=19 -XX:+UseAdaptiveSizePolicy -XX:MaxGCPauseMillis=500 -Xloggc:gc.log
。