java.util.zip.Zipfile SIGBUS JVM 奔溃问题

今天系统发生了
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGBUS (0x7) at pc=0x0000003da4089aab, pid=8027, tid=139713112336128
#
# JRE version: Java(TM) SE Runtime Environment (7.0_60-b19) (build 1.7.0_60-b19)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.60-b09 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libc.so.6+0x89aab]  memcpy+0x15b
错误,具体的报错类是:
Stack: [0x00007f117e5e6000,0x00007f117e6e7000],  sp=0x00007f117e6e32f8,  free space=1012k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libc.so.6+0x89aab]  memcpy+0x15b
C  [libzip.so+0x50b0]  ZIP_GetEntry+0xd0
C  [libzip.so+0x3eed]  Java_java_util_zip_ZipFile_getEntry+0xad
J 117  java.util.zip.ZipFile.getEntry(J[BZ)J (0 bytes) @ 0x00007f136109f16e [0x00007f136109f0a0+0xce]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J 117  java.util.zip.ZipFile.getEntry(J[BZ)J (0 bytes) @ 0x00007f136109f0f8 [0x00007f136109f0a0+0x58]
J 119 C2 java.util.jar.JarFile.getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry; (22 bytes) @ 0x00007f13610a44a8 [0x00007f13610a43e0+0xc8]



对应的解决方案是:升级JDK至少要JAVA 6 u21-rev-b09 以上;
在启动参数中加入-Dsun.zip.disableMemoryMapping=true

原始信息 http://www.oracle.com/us/technologies/java/overview-156328.html#disable-mmap-6u21-rev-b09

Disabling mmap Usage (on Solaris or Linux)
This release includes a new system property, sun.zip.disableMemoryMapping, which allows the user to disable the mmap usage in Sun's java.util.zip.Zipfile implementation (on Solaris and Linux platforms). Solaris or Linux applications that use java.util.zip.ZipFile may experience a SIGBUS VM crash if the application accidentally overwrites any zip or jar files that are still being used by the same Java runtime. Although this is a programming error of the offending application, this system property provides a solution to avoid the VM crash. With the property set to true (-Dsun.zip.disableMemoryMapping=true, or simply -Dsun.zip.disableMemoryMapping) the Sun JDK/JRE runtime disables the mmap usage and the VM crash that might otherwise occur by overwriting the jar or zip file can be avoided.

猜你喜欢

转载自ultrang.iteye.com/blog/2245887